1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android 实现仿微信朋友圈九宫格图片+NineGridView+ImageWatcher(图片查看:1.预览 2

Android 实现仿微信朋友圈九宫格图片+NineGridView+ImageWatcher(图片查看:1.预览 2

时间:2023-02-11 11:19:59

相关推荐

Android 实现仿微信朋友圈九宫格图片+NineGridView+ImageWatcher(图片查看:1.预览 2

一、测试

实现:

二、添加依赖包:

implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'androidx.recyclerview:recyclerview:1.1.0'implementation 'com.github.iielse:ImageWatcher:1.1.5'implementation 'com.github.bumptech.glide:glide:4.10.0'implementation 'com.github.tbruyelle:rxpermissions:0.10.2'implementation 'io.reactivex.rxjava2:rxjava:2.2.16'

二、理解

1.NineGridView九宫格,与微信朋友圈的差不多

2.ImageWatcher图片查看,在九宫格上点击某一个图片后预览:1.拖动,2.放大,3.左右滑动,4.长按保存到手机

2.1 长按预览图片保存到手机(/storage/emulated/0/Pictures/eWorld/1645595672.jpeg),代码:

//长按预览图片保存到手机@Overridepublic void onPictureLongPress(ImageView v, final Uri uri, int pos) {final AlertDialog.Builder alert = new AlertDialog.Builder(this);alert.setTitle("保存图片");alert.setMessage("你确定要保存图片吗?");alert.setNegativeButton("取消", null);alert.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {rxPermissions.request(Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe(new Consumer<Boolean>() {@Overridepublic void accept(Boolean granted) throws Exception {if (granted) {if (uri != null) {// Always true pre-M//图片保存到手机savePhoto(uri);}} else {Toast.makeText(MainActivity.this, "缺少必要权限,请授予权限", Toast.LENGTH_SHORT).show();}}});dialog.dismiss();}});alert.show();}....../*** 长按保存图片** @param uri 图片url地址*/private void savePhoto(Uri uri) {Glide.with(MainActivity.this).asBitmap().load(uri).listener(new RequestListener<Bitmap>() {@Overridepublic boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {String picPath = StorageUtil.getSystemImagePath();StorageUtil.init(MainActivity.this, picPath);dstPath = picPath + (System.currentTimeMillis() / 1000) + ".jpeg";Message message = Message.obtain();message.what = 1;message.obj = resource;myHandler.sendMessage(message);return false;}@Overridepublic boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {return false;}}).submit();}

3.九宫格图片数据用Glide从网上获取图片uri地址转换成图片:

private List<List<String>> getLists() {for (int i = 0; i < 5; i++) {mList = new ArrayList<>();mList.add("/img/tupian/li/07/20/maitian-005.jpg");mList.add("/img/tupian/li/07/16/shandi-008.jpg");mList.add("/img/tupian/li/07/14/feiyi_laguan-008.jpg");mList.add("/img/tupian/li/07/15/xingkong-005.jpg");mList.add("/img/tupian/li/07/12/maitian-011.jpg");mList.add("/img/tupian/li/07/13/xueshan-031.jpg");mList.add("/img/tupian/li/07/15/xingkong-005.jpg");mList.add("/img/tupian/li/07/16/shandi-008.jpg");mList.add("/img/tupian/li/07/05/maitian-005.jpg");mLists.add(mList);}return mLists;}

4.RecyclerView的适配器RvAdapter.java中:

@Overridepublic void onBindViewHolder(@NonNull final MyViewHolder holder, final int rv_item_position) {holder.layout.setSingleImageSize(80, 120);if (mLists.get(rv_item_position) != null && mLists.get(rv_item_position).size() > 0) {holder.layout.setAdapter(new NineImageAdapter(mContext, mRequestOptions,mDrawableTransitionOptions, mLists.get(rv_item_position)));holder.layout.setOnImageClickListener(new NineGridView.OnImageClickListener() {@Overridepublic void onImageClick(int nine_gv_position, View view) {imageWatcher.show((ImageView) view, holder.layout.getImageViews(), getImageUriList(mLists.get(rv_item_position)));}});}}

4.1 九宫格图片NineGridView的适配器NineImageAdapter.java

public class NineImageAdapter implements NineGridView.NineGridAdapter<String> {private List<String> mImageBeans;private Context mContext;private RequestOptions mRequestOptions;private DrawableTransitionOptions mDrawableTransitionOptions;public NineImageAdapter(Context context, RequestOptions requestOptions, DrawableTransitionOptions drawableTransitionOptions, List<String> imageBeans) {this.mContext = context;this.mDrawableTransitionOptions = drawableTransitionOptions;this.mImageBeans = imageBeans;int itemSize = (ScreenUtils.getScreenWidth(mContext) - 2 * Utils.dp2px(4) - Utils.dp2px(54)) / 3;if (mImageBeans.size() > 1) {this.mRequestOptions = requestOptions.override(itemSize, itemSize);} else {this.mRequestOptions = requestOptions.override(itemSize, itemSize * 3 / 2);}}@Overridepublic int getCount() {return mImageBeans == null ? 0 : mImageBeans.size();}@Overridepublic String getItem(int position) {return mImageBeans == null ? null : position < mImageBeans.size() ? mImageBeans.get(position) : null;}@Overridepublic View getView(int position, View itemView) {ImageView imageView;if (itemView == null) {imageView = new ImageView(mContext);imageView.setBackgroundColor(ContextCompat.getColor(mContext, R.color.cf2f2f2));imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));} else {imageView = (ImageView) itemView;}String url = mImageBeans.get(position);if (url == null || url.equals("")) {mRequestOptions.error(R.color.color_grey_cccccc).placeholder(R.color.color_grey_cccccc);Glide.with(mContext).load(R.color.color_grey_cccccc).apply(mRequestOptions).transition(mDrawableTransitionOptions).into(imageView);} else {mRequestOptions.error(R.color.color_grey_cccccc).placeholder(R.color.color_grey_cccccc);Glide.with(mContext).load(url).apply(mRequestOptions).transition(mDrawableTransitionOptions).into(imageView);}return imageView;}}

三、下载源码github地址,点击链接:Android 实现仿微信朋友圈九宫格图片+NineGridView+ImageWatcher(图片查看:1.预览,2.拖动,3.放大,4.左右滑动,5.长按保存到手机)的功能

Android 实现仿微信朋友圈九宫格图片+NineGridView+ImageWatcher(图片查看:1.预览 2.拖动 3.放大 4.左右滑动 5.长按保存到手机)的功能

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。