Android仿微信选择图片和拍照功能
本文实例为大家分享了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, newString[]{Manifest.permission.CAMERA,Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_STORAGE_READ_ACCESS_PERMISSION); }
2.通过图片选择器MultiImageSelector来管理:选择模式、最大选择数量、是否启动相机等功能。
3.点击图片选择按钮跳转到MultiImageSelectorActivity类,其布局如下:(一个Toobar+一个FrameLayout)
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns: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显示从相册获取的图片
<?xmlversion="1.0"encoding="utf-8"?> <RelativeLayoutxmlns: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(newAdapterView.OnItemClickListener(){ @Override publicvoidonItemClick(AdapterView<?>adapterView,Viewview,inti,longl){ if(mImageAdapter.isShowCamera()){ if(i==0){ showCameraAction(); }else{ Imageimage=(Image)adapterView.getAdapter().getItem(i); selectImageFromGrid(image,mode); } }else{ Imageimage=(Image)adapterView.getAdapter().getItem(i); selectImageFromGrid(image,mode); } } });
调用相机功能
/** *Opencamera */ privatevoidshowCameraAction(){ 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{ Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE); if(intent.resolveActivity(getActivity().getPackageManager())!=null){ try{ mTmpFile=FileUtils.createTmpFile(getActivity()); }catch(IOExceptione){ 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(); } } }
选择图片
/** *notifycallback *@paramimageimagedata */ privatevoidselectImageFromGrid(Imageimage,intmode){ 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); }elseif(mode==MODE_SINGLE){ if(mCallback!=null){ mCallback.onSingleImageSelected(image.path); } } } }
本文已被整理到了《Android微信开发教程汇总》,欢迎大家学习阅读。
源码下载:http://xiazai.jb51.net/201611/yuanma/AndroidselectPicture(jb51.net).rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。