当前位置: 移动技术网 > 移动技术>移动开发>Android > Android仿微信选择图片和拍照功能

Android仿微信选择图片和拍照功能

2019年07月24日  | 移动技术网移动技术  | 我要评论
本文实例为大家分享了 android微信选择图片的具体代码,和微信拍照功能,供大家参考,具体内容如下 1.android6.0系统,对于权限的使用都是需要申请,选择图

本文实例为大家分享了 android微信选择图片的具体代码,和微信拍照功能,供大家参考,具体内容如下

1.android6.0系统,对于权限的使用都是需要申请,选择图片和拍照需要申请manifest.permission.camera, manifest.permission.read_external_storage这两个权限。

if (contextcompat.checkselfpermission(this, manifest.permission.camera) != packagemanager.permission_granted) {
   activitycompat.requestpermissions((activity) this,
     new string[] { manifest.permission.camera, manifest.permission.read_external_storage},
     request_storage_read_access_permission);
  }

2.通过图片选择器multiimageselector来管理: 选择模式、最大选择数量、是否启动相机等功能。

3.点击图片选择按钮跳转到multiimageselectoractivity类,其布局如下:(一个toobar + 一个framelayout)

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:orientation="vertical"
 android:background="#181819"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <android.support.v7.widget.toolbar
  android:id="@+id/toolbar"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:background="@color/mis_actionbar_color"
  app:theme="@style/themeoverlay.appcompat.dark.actionbar"
  android:minheight="?android:attr/actionbarsize">

  <button
   android:id="@+id/commit"
   android:background="@drawable/mis_action_btn"
   android:minheight="1dp"
   android:minwidth="1dp"
   android:layout_marginright="16dp"
   android:paddingleft="10dp"
   android:paddingright="10dp"
   android:paddingtop="5dp"
   android:paddingbottom="5dp"
   android:textcolor="@color/mis_default_text_color"
   android:textsize="14sp"
   android:layout_gravity="right"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content" />

 </android.support.v7.widget.toolbar>

 <framelayout
  android:id="@+id/image_grid"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />

</linearlayout>

4.调用如下方法填充展示图片的fragment(multiimageselectorfragment)。

   getsupportfragmentmanager().begintransaction()
     .add(r.id.image_grid, fragment.instantiate(this, multiimageselectorfragment.class.getname(), bundle))
     .commit();

5.multiimageselectorfragment布局用gridview显示从相册获取的图片

<?xml version="1.0" encoding="utf-8"?>
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:background="@android:color/black"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <gridview
  android:id="@+id/grid"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:horizontalspacing="@dimen/mis_space_size"
  android:verticalspacing="@dimen/mis_space_size"
  android:paddingbottom="?android:attr/actionbarsize"
  android:cliptopadding="false"
  android:numcolumns="3"/>

 <relativelayout
  android:clickable="true"
  android:id="@+id/footer"
  android:background="#cc000000"
  android:layout_alignparentbottom="true"
  android:layout_width="match_parent"
  android:layout_height="?android:attr/actionbarsize">

  <button
   android:id="@+id/category_btn"
   android:paddingleft="16dp"
   android:paddingright="16dp"
   android:layout_centervertical="true"
   android:textcolor="@color/mis_folder_text_color"
   tools:text="所有图片"
   android:textsize="16sp"
   android:gravity="center_vertical"
   android:drawableright="@drawable/mis_text_indicator"
   android:drawablepadding="5dp"
   android:background="@null"
   android:singleline="true"
   android:ellipsize="end"
   android:layout_width="wrap_content"
   android:layout_height="match_parent" />

  </relativelayout>

</relativelayout>

6调用android.support.v4.app.loadermanager.class类里面的loadercallbacks方法,等加载完成后给mimageadapter设置数据。

mimageadapter.setdata(images);

7.当允许拍照的时候,显示拍照按钮,调用系统相机功能。

 mgridview.setonitemclicklistener(new adapterview.onitemclicklistener() {
   @override
   public void onitemclick(adapterview<?> adapterview, view view, int i, long l) {
    if (mimageadapter.isshowcamera()) {
     if (i == 0) {
      showcameraaction();
     } else {
      image image = (image) adapterview.getadapter().getitem(i);
      selectimagefromgrid(image, mode);
     }
    } else {
     image image = (image) adapterview.getadapter().getitem(i);
     selectimagefromgrid(image, mode);
    }
   }
  });

调用相机功能

 /**
  * open camera
  */
 private void showcameraaction() {
  if(contextcompat.checkselfpermission(getcontext(), manifest.permission.write_external_storage)
    != packagemanager.permission_granted){
   requestpermission(manifest.permission.write_external_storage,
     getstring(r.string.mis_permission_rationale_write_storage),
     request_storage_write_access_permission);
  }else {
   intent intent = new intent(mediastore.action_image_capture);
   if (intent.resolveactivity(getactivity().getpackagemanager()) != null) {
    try {
     mtmpfile = fileutils.createtmpfile(getactivity());
    } catch (ioexception e) {
     e.printstacktrace();
    }
    if (mtmpfile != null && mtmpfile.exists()) {
     intent.putextra(mediastore.extra_output, uri.fromfile(mtmpfile));
     startactivityforresult(intent, request_camera);
    } else {
     toast.maketext(getactivity(), r.string.mis_error_image_not_exist, toast.length_short).show();
    }
   } else {
    toast.maketext(getactivity(), r.string.mis_msg_no_camera, toast.length_short).show();
   }
  }
 }

选择图片

 /**
  * notify callback
  * @param image image data
  */
 private void selectimagefromgrid(image image, int mode) {
  if(image != null) {
   if(mode == mode_multi) {
    if (resultlist.contains(image.path)) {
     resultlist.remove(image.path);
     if (mcallback != null) {
      mcallback.onimageunselected(image.path);
     }
    } else {
     if(selectimagecount() == resultlist.size()){
      toast.maketext(getactivity(), r.string.mis_msg_amount_limit, toast.length_short).show();
      return;
     }
     resultlist.add(image.path);
     if (mcallback != null) {
      mcallback.onimageselected(image.path);
     }
    }
    mimageadapter.select(image);
   }else if(mode == mode_single){
    if(mcallback != null){
     mcallback.onsingleimageselected(image.path);
    }
   }
  }
 }

本文已被整理到了《android微信开发教程汇总》,欢迎大家学习阅读。

源码下载:

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网