android仿微信图片编辑库,Android仿微信朋友圈添加图片
github地址(欢迎下载Demo)
Paste_Image.png
老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧,先把工作完成了,再看也来得及,是吧!
仿微信添加图片.gif
在项目中这种添加图片上传的效果应该是非常常见的,后面有个添加的按钮应该让有些童鞋不知道咋办了吧,其实没那么复杂,通过GridView就可以实现了
先说明一下,这里主要是讲添加图片的效果,至于图片选择器用的是第三方库PictureSelector,强烈推荐
1、首先这是用GridView实现的
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical">
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:columnWidth="60dp"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp" />
Adapter
package com.dearxy.wxcircleaddpic;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import java.util.List;
/**
* 展示上传的图片的GridView的适配器
*
* 作者: 周旭 on 2017/6/21/0021.
* 邮箱:374952705@qq.com
* 博客:http://www.jianshu.com/u/56db5d78044d
*/
public class GridViewAdapter extends android.widget.BaseAdapter {
private Context mContext;
private List mList;
private LayoutInflater inflater;
public GridViewAdapter(Context mContext, List mList) {
this.mContext = mContext;
this.mList = mList;
inflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
//return mList.size() + 1;//因为最后多了一个添加图片的ImageView
int count = mList == null ? 1 : mList.size() + 1;
if (count > MainConstant.MAX_SELECT_PIC_NUM) {
return mList.size();
} else {
return count;
}
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.grid_item, parent,false);
ImageView iv = (ImageView) convertView.findViewById(R.id.pic_iv);
if (position < mList.size()) {
//代表+号之前的需要正常显示图片
String picUrl = mList.get(position); //图片路径
Glide.with(mContext).load(picUrl).into(iv);
} else {
iv.setImageResource(R.mipmap.zj);//最后一个显示加号图片
}
return convertView;
}
}
MainActivity
/**
* 仿微信朋友圈添加图片的效果
*/
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private Context mContext;
private GridView gridView;
private ArrayList mPicList = new ArrayList<>(); //上传的图片凭证的数据源
private GridViewAdapter mGridViewAddImgAdapter; //展示上传的图片的适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
gridView = (GridView) findViewById(R.id.gridView);
initGridView();
}
//初始化展示上传图片的GridView
private void initGridView() {
mGridViewAddImgAdapter = new GridViewAdapter(mContext, mPicList);
gridView.setAdapter(mGridViewAddImgAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view,
int position, long id) {
if (position == parent.getChildCount() - 1) {
//如果“增加按钮形状的”图片的位置是最后一张,且添加了的图片的数量不超过5张,才能点击
if (mPicList.size() == MainConstant.MAX_SELECT_PIC_NUM) {
//最多添加5张图片
viewPluImg(position);
} else {
//添加凭证图片
selectPic(MainConstant.MAX_SELECT_PIC_NUM - mPicList.size());
}
} else {
viewPluImg(position);
}
}
});
}
//查看大图
private void viewPluImg(int position) {
Intent intent = new Intent(mContext, PlusImageActivity.class);
intent.putStringArrayListExtra(MainConstant.IMG_LIST, mPicList);
intent.putExtra(MainConstant.POSITION, position);
startActivityForResult(intent, MainConstant.REQUEST_CODE_MAIN);
}
/**
* 打开相册或者照相机选择凭证图片,最多5张
*
* @param maxTotal 最多选择的图片的数量
*/
private void selectPic(int maxTotal) {
PictureSelectorConfig.initMultiConfig(this, maxTotal);
}
// 处理选择的照片的地址
private void refreshAdapter(List picList) {
for (LocalMedia localMedia : picList) {
//被压缩后的图片路径
if (localMedia.isCompressed()) {
String compressPath = localMedia.getCompressPath(); //压缩后的图片路径
mPicList.add(compressPath); //把图片添加到将要上传的图片数组中
mGridViewAddImgAdapter.notifyDataSetChanged();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PictureConfig.CHOOSE_REQUEST:
// 图片选择结果回调
refreshAdapter(PictureSelector.obtainMultipleResult(data));
// 例如 LocalMedia 里面返回三种path
// 1.media.getPath(); 为原图path
// 2.media.getCutPath();为裁剪后path,需判断media.isCut();是否为true
// 3.media.getCompressPath();为压缩后path,需判断media.isCompressed();是否为true
// 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
break;
}
}
if (requestCode == MainConstant.REQUEST_CODE_MAIN && resultCode == MainConstant.RESULT_CODE_VIEW_IMG) {
//查看大图页面删除了图片
ArrayList toDeletePicList = data.getStringArrayListExtra(MainConstant.IMG_LIST); //要删除的图片的集合
mPicList.clear();
mPicList.addAll(toDeletePicList);
mGridViewAddImgAdapter.notifyDataSetChanged();
}
}
}
总结:其实原理就是把数据的size+1,做为添加按钮的放置,然后判断下有9张图就不显示添加按钮,并且size也不+1,就这样,一个带添加按钮的GridView就好了~有什么不懂得可以留言。
android仿微信图片编辑库,Android仿微信朋友圈添加图片相关推荐
- Android 仿微信朋友圈添加图片
github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...
- 使用GridView实现仿微信发朋友圈添加图片,点击预览、删除图片
最近在项目中有一个用户反馈的功能中要上传图片,和微信发朋友圈添加图片的功能其实有点类似,所以我想着用GridView来实现这个功能,整个过程也很简单,画不多说,详细步骤见下: 1.先来看MainAct ...
- 微信仿朋友圈添加图片
微信仿朋友圈添加图片 问题: 添加过多图片时,会出现OOM. 如何动态修改图片展示栏的高度. 加号如何伴随图片的增加而后移. 如何保证最多添加照片为9张. 添加过多图片时,会出现OOM 出现第一种情况 ...
- android仿微信图片编辑库,Android仿微信图片选择器
很多项目要用到图片选择控件,每次都要写一大堆逻辑.于是基于图片选择组件(PhotoPicker)封装了一个控件PhotoUploadView.方便简易,一键集成,几句代码就可以添加类似微信的图片选择控 ...
- 微信小程序剪裁分享到朋友圈的图片
1.效果 如果将一整张图片分享到朋友圈,会显示的很奇怪,目前是截取图片的左边一小部分分享,同时图片上传时尽量要求左边放人物像. 2.wxml <canvas id="subject-d ...
- android从九宫格全屏预览,仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图...
AssNineGridView 仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图(可自定义). 写在前面 这是一个九宫格控件,本来是很久之前就写好了,现在才开源出来,也是看了很多优秀 ...
- android 微信高仿,Android 高仿微信发朋友圈浏览图片效果(转)
最近一直在高仿微信.高仿微信,今天小编再给大家分享一个仿微信发朋友圈浏览图片的效果.... 好了,先看一下效果吧: 这里写图片描述 下面就来说一下具体怎么实现的: 实现思路 1.首先我们要获取数据源, ...
- Android 实现仿微信朋友圈九宫格图片+NineGridView+ImageWatcher(图片查看:1.预览,2.拖动,3.放大,4.左右滑动,5.长按保存到手机)的功能
一.测试 实现: 二.添加依赖包: implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'androidx.recycl ...
- Android Image Edit Lib. Android 图片编辑库,微信图片编辑库
Imaging 项目地址:minetsh/Imaging 简介: Android Image Edit Lib. Android 图片编辑库,微信图片编辑库 更多:作者 提 Bug 标签: 一款 ...
- Android仿微信朋友圈发图片和文字
Android仿微信朋友圈发图片和文字的一个开源项目,其在github上的项目主页是:https://github.com/zhangphil/FangWeiXinPengYouQuanFaTuPia ...
最新文章
- Vector和LinkedList源代码阅读笔记
- Mysql之复制一张表的内容到新表中
- java 异常管理员_java web在进行管理员操作的时候,抛出了下面的异常,怎么解决啊...
- sdk和api有什么区别
- 你需要知道的基础算法知识——STL和基础数据结构(四)
- RTX——第10章 任务调度-抢占式、时间片和合作式
- SQL递归查询知多少
- 20. DICOM图像层级分类-DCMTK-层级分类
- 推荐一个死链检测工具“Xenu”
- 微信小程序音量调节插件
- 数据库:简述对数据库的认识
- 惋惜!杭州互联网公司22岁女孩猝死!某大厂家属怒喷996的工作方式...
- JAVA基础-多线程中锁机制
- YOLOX论文逐句翻译
- Unity 自发光(燃烧)溶解Shader
- 深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法
- 一个网站完整详细的SEO优化方案
- KubeSphere 内置的 Prometheus 通过 remote write 至 Thanos 存更长期数据
- 用水泥混凝土摊铺机进行作业时该做到的日常养护工作
- 如何将SW工程图转换成CAD格式?