Android 仿微信朋友圈添加图片
github地址(欢迎下载Demo)
https://github.com/zhouxu88/WXCircleAddPic
老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧,先把工作完成了,再看也来得及,是吧!

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical"> <!--展示上传的图片-->
<GridView
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" /> </LinearLayout>
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的适配器
* <p>
* 作者: 周旭 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<String> mList;
private LayoutInflater inflater; public GridViewAdapter(Context mContext, List<String> mList) {
this.mContext = mContext;
this.mList = mList;
inflater = LayoutInflater.from(mContext);
} @Override
public int getCount() {
//return mList.size() + 1;//因为最后多了一个添加图片的ImageView
int count = mList == null ? : mList.size() + ;
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<String> 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() - ) {
//如果“增加按钮形状的”图片的位置是最后一张,且添加了的图片的数量不超过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<LocalMedia> 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<String> toDeletePicList = data.getStringArrayListExtra(MainConstant.IMG_LIST); //要删除的图片的集合
mPicList.clear();
mPicList.addAll(toDeletePicList);
mGridViewAddImgAdapter.notifyDataSetChanged();
}
}
}
总结:其实原理就是把数据的size+1,做为添加按钮的放置,然后判断下有9张图就不显示添加按钮,并且size也不+1,就这样,一个带添加按钮的GridView就好了~有什么不懂得可以留言。
Android 仿微信朋友圈添加图片的更多相关文章
- Android 仿微信朋友圈发表图片拖拽和删除功能
朋友圈实现原理 我们使用 Android Device Monitor 来分析朋友圈发布图片的界面实现原理.如果需要分析其他应用的界面实现也是采用这种方法哦. 打开 Android Device Mo ...
- Android 仿微信朋友圈发动态功能(相册图片多选)
代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-15276 ...
- Android仿微信朋友圈,全文收起功能,附源码
在众多的社交类软件中,朋友圈是必不可少的,可以与好友.同学等分享自己的日常和有意思的事情,在开发社交类App时,朋友圈发表的内容你不可能让他全部显示,全部显示的话用户体验度会非常不好,这时就要用到全文 ...
- Android 仿微信朋友圈拍小视频上传到服务器
这个接上一个写的实现拍小视频和传到服务器的 界面是这个样子滴. 我也知不知道怎么给图片搞小一点o(╯□╰)o 布局文件是这样的[认真脸] <?xml version="1.0&quo ...
- Android 仿微信朋友圈查看
项目要做一个类似于这样的功能,就做了. 项目下载地址:http://download.csdn.net/detail/u014608640/9917626 一,看下效果: 二.activity类 pu ...
- Android 仿微信朋友圈点击图片变暗
package cn.eoe.leigo.view; import android.content.Context; import android.graphics.Bitmap; import an ...
- Android NineGridLayout — 仿微信朋友圈和QQ空间的九宫格图片展示自定义控件
NineGridLayout 一个仿微信朋友圈和QQ空间的九宫格图片展示自定义控件. GitHub:https://github.com/HMY314/NineGridLayout 一.介绍 1.当只 ...
- Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。
转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...
- Android仿微信朋友圈图片查看器
转载请注明出处:http://blog.csdn.net/allen315410/article/details/40264551 看博文之前,希望大家先打开自己的微信点到朋友圈中去,细致观察是不是发 ...
随机推荐
- ietester
ietest 最好安装在默认的C 装在其他的地方会报错
- HUD1686(KMP入门题)
Oulipo Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- hibernate VS mybatis
1: 一般来说,业务逻辑比较简单,集增删改查就可以满足需求,建议使用hibernate,而复杂的业务逻辑,尤其是多表关联查询,建议使用mybatis. 2: hibernate有更好的二级缓存机制,可 ...
- 【旧文章搬运】关于NtUserBuildHwndList的一点记录~
原文发表于百度空间,2011-04-07========================================================================== 该函数与r ...
- java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor错误
一般是jar包冲突,或者某些jar包版本不同. 如上,spring其他包的版本均为4.2.5,而spring-webmvc的jar包为1.2.6版本,造成版本冲突. 把该包版本改为4.2.5,宣告成功 ...
- WebService完成文件上传下载
由于开发需要使用webservice,第一个接触的工具叫axis2.项目开发相关jar下载. service端: 启动类: import java.net.InetAddress; import ja ...
- mysql:视图,触发器
一视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL 语句获取动态的数据集,并未其命名],用户使用时只需使用名称即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以吧查询过程的临时表 ...
- throw UnsupportedOperationException
package org.usc.action; import java.util.ArrayList; import java.util.Arrays; import java.util.List; ...
- 着色语言(Shader Language)
摘抄"GPU Programming And Cg Language Primer 1rd Edition" 中文名"GPU编程与CG语言之阳春白雪下里巴人" ...
- mongodb 由于计算机死机造成的无法启动故障
一次计算机死机,重启后,mongodb无法启动,log显示: exception in initAndListen: 12596 old lock file, terminating Sun Mar ...