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, new String[] { Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_STORAGE_READ_ACCESS_PERMISSION); }
2.通过图片选择器MultiImageSelector来管理: 选择模式、最大选择数量、是否启动相机等功能。
3.点击图片选择按钮跳转到MultiImageSelectorActivity类,其布局如下:(一个Toobar + 一个FrameLayout)
4.调用如下方法填充展示图片的fragment(MultiImageSelectorFragment)。
getSupportFragmentManager().beginTransaction() .add(R.id.image_grid, Fragment.instantiate(this, MultiImageSelectorFragment.class.getName(), bundle)) .commit();
5.MultiImageSelectorFragment布局用gridview显示从相册获取的图片
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仿微信选择图片和拍照功能,而小编的介绍是比较通俗易懂的,大家只要在学习之前多了解这些知识,一定能让项目更进一步。