Android仿微信选择图片和拍照功能
程序员文章站
2024-02-27 21:59:21
本文实例为大家分享了 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微信开发教程汇总》,欢迎大家学习阅读。
源码下载:http://xiazai.jb51.net/201611/yuanma/androidselectpicture(jb51.net).rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。