Android自定义相机界面的实现代码
程序员文章站
2024-02-29 10:20:34
我们先实现拍照按钮的圆形效果哈,android开发中,当然可以找美工人员设计图片,然后直接拿进来,不过我们可以自己写代码实现这个效果哈,最常用的的是用layout-list...
我们先实现拍照按钮的圆形效果哈,android开发中,当然可以找美工人员设计图片,然后直接拿进来,不过我们可以自己写代码实现这个效果哈,最常用的的是用layout-list实现图片的叠加,我们这个layout命名为btn_take_photo.xml,这是一个自定义的drawable文件,所以按照规范,我们要将它放在drawable文件夹里。
注意:drawable文件夹一般是来放自定义的drawable文件的,可以将它看成自己写的背景样式等等哦
解释代码:
layer-list里面放3个item,先实现一个白色背景的椭圆,属性android:shape="oval"是实现椭圆的
android:shape=["rectangle" | "oval" | "line" | "ring"]
shape的形状,默认为矩形,可以设置为矩形(rectangle)、椭圆形(oval)、线性形状(line)、环形(ring)
然后再放入一个item,这个item是一个左右上下都等长的椭圆
ok,这样一个等边的椭圆就做好了
接着再次放入一个一个蓝色背景的椭圆
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="oval"> <solid android:color="@color/white" /> </shape> </item> <item android:bottom="6dp" android:left="6dp" android:right="6dp" android:top="6dp"> <shape android:shape="oval"> <solid android:color="@color/blue" /> </shape> </item> <item> <shape android:shape="oval"> <stroke android:width="1dp" android:color="@color/blue" android:dashwidth="0dp" /> </shape> </item> </layer-list>
这是一个界面:activity_take_photo.xml
界面的很简单,这里只是提供参考学习的,解释代码:
surfaceview是用来拍照用的,注意这个类只要和视频或者拍照的都需要用到,不过项目里一般都是自己写的。
这些代码只是参考互相学习,功能的话,自己还在做,所以先提供这些学习的...,希望可以帮助学习的人,然后自己写博客的目的也是对自己学习的技术进行收录和共享,只是本着互相学习的目的。
<framelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff"> <!-- 显示预览图形 --> <surfaceview android:id="@+id/surfaceview" android:layout_width="match_parent" android:layout_height="match_parent" /> <relativelayout android:id="@+id/buttonlayout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/pic"> <relativelayout android:id="@+id/panel_take_photo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:background="@color/white" android:gravity="center_vertical" android:padding="2dp"> <button android:id="@+id/btn_take_photo" android:layout_width="50dp" android:layout_height="50dp" android:background="@drawable/btn_take_photo" android:layout_centerhorizontal="true" android:layout_aligntop="@+id/iv_album" /> <imageview android:id="@+id/iv_album" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignparentleft="true" android:layout_centervertical="true" android:layout_marginleft="20dp" android:padding="5dp" android:src="@drawable/camera_library" /> <imageview android:id="@+id/title_btn_black" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignparentright="true" android:layout_centervertical="true" android:layout_marginright="20dp" android:padding="5dp" android:src="@drawable/camera_back" /> </relativelayout> <linearlayout android:id="@+id/photo_area" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@id/panel_take_photo" android:layout_centervertical="true" android:background="@color/white" android:orientation="horizontal"></linearlayout> <!-- 自定义的标题栏--> <relativelayout android:id="@+id/camera_top" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_alignparenttop="true" android:background="@color/black"> <imageview android:id="@+id/btn_black" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignparentleft="true" android:paddingbottom="10dp" android:paddingleft="10dp" android:paddingtop="10dp" android:src="@drawable/back" /> <imageview android:id="@+id/btn_change" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignparentright="true" android:layout_centervertical="true" android:paddingbottom="10dp" android:paddingright="10dp" android:paddingtop="10dp" android:src="@drawable/camera_flip" /> </relativelayout> <!-- 自定义的cameragrid--> <org.personality.camera.ui.view.cameragrid android:id="@+id/masking" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/photo_area" android:layout_alignparenttop="true" /> <view android:id="@+id/focus_index" android:layout_width="40dp" android:layout_height="40dp" android:layout_above="@id/photo_area" android:background="@drawable/cam_focus" android:visibility="invisible" /> </relativelayout> </framelayout>
提供自定义cameragrid类:
/** * 自定义的view * 照相机井字线 * */ public class cameragrid extends view { private int topbannerwidth = 0; private paint mpaint; public cameragrid(context context) { this(context,null); } public cameragrid(context context, attributeset attrs) { super(context, attrs); init(); } private void init(){ mpaint = new paint(); mpaint.setcolor(color.white); mpaint.setalpha(120); mpaint.setstrokewidth(1f); } private boolean showgrid = true; public boolean isshowgrid() { return showgrid; } public void setshowgrid(boolean showgrid) { this.showgrid = showgrid; } public int gettopwidth() { return topbannerwidth; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。