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;
 }
} 

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

(0)

相关推荐

  • Android自定义相机实现定时拍照功能

    这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能. 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: activity_main.xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="m

  • Android自定义组件获取本地图片和相机拍照图片

    iOS中有封装好的选择图片后长按出现动画删除效果,效果如下 而Android找了很久都没有找到有这样效果的第三方组件,最后懒得找了还是自己实现这效果吧 选择图片后还可对图片进行剪裁 当然,代码中还有很多不完善的地方,我接下来会继续完善这个组件的 已经上传到开源社区,欢迎大家来Star啊~ Demo源码:传送门 设计中的碰到的一些问题和解决思路 1.如何让加号图片显示在GridView最后面 首先在调用GridAdapter构造方法时就加载加号图片 /** * 图片适配器 * @param con

  • Android实用控件自定义逼真相机光圈View

    最近手机界开始流行双摄像头,大光圈功能也应用而生.所谓大光圈功能就是能够对照片进行后期重新对焦,其实现的原理主要是对拍照期间获取的深度图片与对焦无穷远的图像通过算法来实现重新对焦的效果. 在某双摄手机的大光圈操作界面有个光圈的操作图标,能够模拟光圈调节时的真实效果,感觉还不错,于是想着实现该效果.现在把我的实现方法贡献给大家,万一你们公司也要做双摄手机呢?( ̄┰ ̄*) 首先,百度一下光圈图片,观察观察,就可以发现其关键在于计算不同的光圈值时各个光圈叶片的位置.为了计算简便,我以六个直边叶片的光圈

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

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

  • Android中关于自定义相机预览界面拉伸问题

    关于自定义相机预览界面拉伸问题 1.导致主要变形的原因是Camera预览界面旋转的角度和摄像头挂载的角度不同导致的 2.我们的Activity设置的方向是竖屏,这是手机的自然方向 所以宽比高短 3.角度:所谓屏幕和摄像头的角度,指的是相对于自然方向旋转过的角度,根据旋转角度即可获知当前的方向 4.假如说:手机是竖屏的情况下, 自然角度为0,但是Camera逆时针旋转90度,那咱们设置顺时针旋转90度,就正常 .手机是横屏的情况下Camera返回为0度 ,如果设置顺时针旋转90度,就回旋转 怎么设

  • Android 用 camera2 API 自定义相机

    前言 笔者因为项目需要自定义相机,所以了解了一下 Android 关于 camera 这块的 API.Android SDK 21(LOLLIPOP) 开始已经弃用了之前的 Camera 类,提供了 camera2 相关 API,目前网上关于 camera2 API 介绍的资料比较少,笔者搜集网上资料,结合自己的实践,在这里做一个总结. 流程 因为 camera2 提供的接口比较多,虽然很灵活,但是也增加了使用的复杂度.首先来大致了解一下调用 camera2 的流程,方便我们理清思路. 要显示相

  • Android自定义照相机倒计时拍照

    自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: 两个TextView是用来显示提示信息和倒计时的秒数的 相关教程:Android开发从相机或相册获取图片裁剪 Android启动相机拍照并返回图片 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools&qu

  • Android 自定义相机及分析源码

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

  • Android自定义照相机Camera出现黑屏的解决方法

    本文实例讲述了Android自定义照相机Camera出现黑屏的解决方法.分享给大家供大家参考,具体如下: 对于一些手机,像HTC,当自定义Camera时,调用Camera.Parameters的 parameters.setPreviewSize(width, height)方法时,如果width和height为奇数情况下,则会出现黑屏现象,解决办法可参考SDK提供的ApiDemos中关于Camera的 例子: List<Size> sizes = parameters.getSupporte

  • Android自定义照相机详解

    几乎每个APP都会用的相机功能,下面小编把内容整理分享到我们平台,供大家参考,感兴趣的朋友一起学习吧! 启动相机的两种方式 1.直接启动系统相机 <code class="hljs avrasm"> Intent intent = new Intent(); intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); startActivity(intent);</code> 或者指定返回图片的名称mCurrentPho

随机推荐