Android自定义相机界面的实现代码

我们先实现拍照按钮的圆形效果哈,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; } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-10-26 18:44:09

Android自定义相机界面的实现代码的相关文章

Android自定义手机界面状态栏实例代码

前言 我们知道IOS上的应用,状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,那安卓是否可以呢?若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦,这是个不错的体验!若你手机上安装有最新版的qq,并且你的安卓SDK版本是4.4及以上,你可以看下它的效果: 实现这个效果有两个方法: 1.在xml中设置主题或自定义style: Theme.Holo.Light.NoActionBar.TranslucentDecor Theme.Holo.NoActi

Android自定义相机实现自动对焦和手动对焦_Android

Android自定义相机实现自动对焦和手动对焦: 不调用系统相机,因为不同的机器打开相机呈现的界面不统一也不能满足需求. 所以为了让程序在不同的机器上呈现出统一的界面,并且可以根据需求进行布局,做了此demo. 程序实现代码如下: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.la

Android自定义相机实现自动对焦和手动对焦

Android自定义相机实现自动对焦和手动对焦: 不调用系统相机,因为不同的机器打开相机呈现的界面不统一也不能满足需求. 所以为了让程序在不同的机器上呈现出统一的界面,并且可以根据需求进行布局,做了此demo. 程序实现代码如下: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.la

Android 自定义相机及分析源码

Android 自定义相机及分析源码 使用Android 系统相机的方法: 要想让应用有相机的action,咱们就必须在清单文件中做一些声明,好让系统知道,如下 <intent-filter> <action android:name="android.intent.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" />

android 自定义相机预览的问题

问题描述 android 自定义相机预览的问题 我现在刚学的android,然后做了一个相机的应用,预览的时候在avd上运行都是竖屏的,图像也没有变形,但是换到手机上就变成90度了图像也被拉长了,照着网上好多方法改在手机上都不行,avd上没问题,请问下这可能是什么原因?我手机是三星的.

Android打开相机和相册实例代码_Android

本文实例为大家分享了Android打开相机和相册具体代码,供大家参考,具体内容如下 打开相机  /** * 选择相机 */ private void showCamera() { // 跳转到系统照相机 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (cameraIntent.resolveActivity(getPackageManager()) != null) { // 设置系统相机拍照后的输出路

Android 自定义弹出框实现代码_Android

废话不多说了,直接给大家上关键代码了. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self showAlertView:@"11111"]; } //自定义弹出框 -(void)showAlertView:(NSString *)strTipText { UIView *showView=[[UIView alloc]init]; [sho

Android 自定义弹出框实现代码

废话不多说了,直接给大家上关键代码了. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self showAlertView:@"11111"]; } //自定义弹出框 -(void)showAlertView:(NSString *)strTipText { UIView *showView=[[UIView alloc]init]; [sho

Android打开相机和相册实例代码

本文实例为大家分享了Android打开相机和相册具体代码,供大家参考,具体内容如下 打开相机 /** * 选择相机 */ private void showCamera() { // 跳转到系统照相机 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (cameraIntent.resolveActivity(getPackageManager()) != null) { // 设置系统相机拍照后的输出路径