android 微信相册功能,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)

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: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">

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:id="@+id/image_grid"

android:layout_width="match_parent"

android:layout_height="match_parent" />

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

getSupportFragmentManager().beginTransaction()

.add(R.id.image_grid, Fragment.instantiate(this, MultiImageSelectorFragment.class.getName(), bundle))

.commit();

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

xmlns:tools="http://schemas.android.com/tools"

android:background="@android:color/black"

android:layout_width="match_parent"

android:layout_height="match_parent">

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"/>

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">

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" />

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微信开发教程汇总》,欢迎大家学习阅读。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中实现仿微信宫格相册功能可以通过以下步骤来完成。 首先,需要使用RecyclerView来展示图片。RecyclerView是一个功能强大的视图控件,可以以列表的形式展示内容,并且支持滚动、刷新等功能。 其次,需要定义一个适配器来管理RecyclerView中的数据。适配器负责将图片数据绑定到RecyclerView的视图上,并且处理用户的交互事件。 然后,需要创建一个数据模型类来表示每个图片的信息,例如图片的路径、名称等。这些信息可以通过扫描手机的相册来获取。 接下来,可以使用第三方库如Glide或Picasso来加载和显示图片。这些库可以帮助我们有效地处理图片的加载、缓存和显示。 在展示图片时,可以使用GridLayout来实现宫格布局,即将图片分成若干个格子进行排列。可以根据不同的需求设置每行显示的图片数量,以及格子之间的间距。 为了提高用户体验,可以支持图片的点击事件。当用户点击某张图片时,可以使用弹出框或者打开新的界面来展示图片的详细信息,如放大预览、分享等。 最后,为了更好地管理和显示图片,可以使用数据库来存储图片的信息,例如图片的路径、标签等。这样可以方便地进行搜索、排序和过滤等操作。 总的来说,实现仿微信宫格相册功能需要使用RecyclerView、适配器、数据模型类、第三方图片加载库、GridLayout布局以及数据库等技术。通过合理地组合和使用这些技术,可以实现一个功能完善且用户体验良好的相册应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值