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仿微信朋友圈添加图片相关推荐

  1. Android 仿微信朋友圈添加图片

    github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...

  2. 使用GridView实现仿微信发朋友圈添加图片,点击预览、删除图片

    最近在项目中有一个用户反馈的功能中要上传图片,和微信发朋友圈添加图片的功能其实有点类似,所以我想着用GridView来实现这个功能,整个过程也很简单,画不多说,详细步骤见下: 1.先来看MainAct ...

  3. 微信仿朋友圈添加图片

    微信仿朋友圈添加图片 问题: 添加过多图片时,会出现OOM. 如何动态修改图片展示栏的高度. 加号如何伴随图片的增加而后移. 如何保证最多添加照片为9张. 添加过多图片时,会出现OOM 出现第一种情况 ...

  4. android仿微信图片编辑库,Android仿微信图片选择器

    很多项目要用到图片选择控件,每次都要写一大堆逻辑.于是基于图片选择组件(PhotoPicker)封装了一个控件PhotoUploadView.方便简易,一键集成,几句代码就可以添加类似微信的图片选择控 ...

  5. 微信小程序剪裁分享到朋友圈的图片

    1.效果 如果将一整张图片分享到朋友圈,会显示的很奇怪,目前是截取图片的左边一小部分分享,同时图片上传时尽量要求左边放人物像. 2.wxml <canvas id="subject-d ...

  6. android从九宫格全屏预览,仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图...

    AssNineGridView 仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图(可自定义). 写在前面 这是一个九宫格控件,本来是很久之前就写好了,现在才开源出来,也是看了很多优秀 ...

  7. android 微信高仿,Android 高仿微信发朋友圈浏览图片效果(转)

    最近一直在高仿微信.高仿微信,今天小编再给大家分享一个仿微信发朋友圈浏览图片的效果.... 好了,先看一下效果吧: 这里写图片描述 下面就来说一下具体怎么实现的: 实现思路 1.首先我们要获取数据源, ...

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

    一.测试 实现: 二.添加依赖包: implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'androidx.recycl ...

  9. Android Image Edit Lib. Android 图片编辑库,微信图片编辑库

    Imaging 项目地址:minetsh/Imaging  简介: Android Image Edit Lib. Android 图片编辑库,微信图片编辑库 更多:作者   提 Bug 标签: 一款 ...

  10. Android仿微信朋友圈发图片和文字

    Android仿微信朋友圈发图片和文字的一个开源项目,其在github上的项目主页是:https://github.com/zhangphil/FangWeiXinPengYouQuanFaTuPia ...

最新文章

  1. Vector和LinkedList源代码阅读笔记
  2. Mysql之复制一张表的内容到新表中
  3. java 异常管理员_java web在进行管理员操作的时候,抛出了下面的异常,怎么解决啊...
  4. sdk和api有什么区别
  5. 你需要知道的基础算法知识——STL和基础数据结构(四)
  6. RTX——第10章 任务调度-抢占式、时间片和合作式
  7. SQL递归查询知多少
  8. 20. DICOM图像层级分类-DCMTK-层级分类
  9. 推荐一个死链检测工具“Xenu”
  10. 微信小程序音量调节插件
  11. 数据库:简述对数据库的认识
  12. 惋惜!杭州互联网公司22岁女孩猝死!某大厂家属怒喷996的工作方式...
  13. JAVA基础-多线程中锁机制
  14. YOLOX论文逐句翻译
  15. Unity 自发光(燃烧)溶解Shader
  16. 深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法
  17. 一个网站完整详细的SEO优化方案
  18. KubeSphere 内置的 Prometheus 通过 remote write 至 Thanos 存更长期数据
  19. 用水泥混凝土摊铺机进行作业时该做到的日常养护工作
  20. 如何将SW工程图转换成CAD格式?

热门文章

  1. 09-10c语言试卷a,09C语言试卷A-B(试题).doc
  2. SAP-MM MRP类型详解
  3. ArcGIS聚类分析
  4. 【Research】Accounting-会计
  5. java语言获取应用服务器的时间_java如何获得服务器时间
  6. 常用软件分类 精选列表(二)
  7. 基于python的新闻发布系统
  8. HTML5 Audio时代的MIDI音乐文件播放 .
  9. 大疆livox雷达调试
  10. html弹框整体缩放,网页弹出对话框无法放大