本文介绍了Android用RecyclerView实现动态添加本地图片,分享给大家,具体如下:

简单介绍一下用法:

1、跳转到图片选择页面:

Intent intent = new Intent(PassengerSetActivity.this, MultiImageSelectorActivity.class);

intent.putExtra(MultiImageSelectorActivity.EXTRA_SHOW_CAMERA, true);

intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_COUNT, 9);

intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_MODE, MultiImageSelectorActivity.MODE_SINGLE);

startActivityForResult(intent, 10001);//10001-->添加

2、通过onActivityResult获取信息:

final ArrayList paths = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT);

Bitmap bitmap = BitmapFactory.decodeFile(paths.get(0), DIY_dialog.getBitmapOption(4));

首先设置布局管理器为:

recyclerview.setLayoutManager(new GridLayoutManager(this, 3));

然后设置适配器(这里在代码里面有详细的注释):

public class PassengerAdapter extends RecyclerView.Adapter {

private Context mContext;

private OnItemClickLitener listener;//点击事件接口

private ArrayList imageUrls;

private ImageFetcher imageFetcher;

private ViewHolder viewHolder;

private View view;

/**

* 在构造方法中传入图片地址的数据

* @param context

* @param imageUrls

*/

public PassengerAdapter(Context context, ArrayList imageUrls) {

this.mContext = context;

this.imageUrls = imageUrls;

//初始化加载网络图片的jar包

imageFetcher = new ImageFetcher(context);

imageFetcher.setImageCache(ImageCache.getInstance(context));

}

@Override

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

view = LayoutInflater.from(mContext).inflate(R.layout.lay_passager, null);

viewHolder = new ViewHolder(view);

return viewHolder;

}

@Override

public void onBindViewHolder(ViewHolder holder, int position) {

//设置内容为“hehe”的的元素为默认的添加按钮

if (imageUrls.get(position).equals("hehe")) {

holder.imageViewBig.setBackgroundResource(R.mipmap.add);

//当图片是添加按钮的时候隐藏删除按钮

holder.imageViewSmall.setVisibility(View.GONE);

} else {

holder.imageViewSmall.setVisibility(View.VISIBLE);

/**

* 判断图片路径是网络地址还是本地图片

* 设置路径之中包含“storage”的为本地图片

*/

if (imageUrls.get(position).contains("storage")) {

try {

File file = new File(imageUrls.get(position));

//将bitmap转化成drawable

Bitmap bmp = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), Uri.fromFile(file));

Drawable drawable =new BitmapDrawable(bmp);

//按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)

holder.imageViewBig.setScaleType(ImageView.ScaleType.CENTER_CROP);

holder.imageViewBig.setImageBitmap(bmp);

} catch (IOException e) {

e.printStackTrace();

}

// holder.imageViewBig.setImageURI(Uri.parse(imageUrls.get(position)));

} else {

imageFetcher.loadImage(imageUrls.get(position), holder.imageViewBig, R.mipmap.touxiang);

}

}

}

@Override

public int getItemCount() {

return imageUrls.size();

}

public void setOnItemClickLitener(OnItemClickLitener listener) {

this.listener = listener;

}

public interface OnItemClickLitener {

void onBigClick(int position);

void onSmallClick(int position);

}

class ViewHolder extends RecyclerView.ViewHolder {

ImageView imageViewBig, imageViewSmall;

public ViewHolder(View itemView) {

super(itemView);

imageViewBig = (ImageView) itemView.findViewById(R.id.imageViewBig);

imageViewSmall = (ImageView) itemView.findViewById(R.id.imageViewSmall);

/**

*

* 因为元素是变化的,动态的,所以对点击事件的处理放在ViewHolder类里面,调用getposition()

* 可以获取到当前的元素位子

*/

imageViewBig.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

int position = (Integer) v.getTag();

listener.onBigClick(getPosition());

}

});

imageViewSmall.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

int position = (Integer) v.getTag();

listener.onSmallClick(getPosition());

}

});

}

}

}

recycler的布局文件

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/lay_group"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

android:id="@+id/imageViewBig"

android:layout_width="120dp"

android:layout_height="120dp"

android:background="@mipmap/background"

/>

android:id="@+id/imageViewSmall"

android:layout_width="20dp"

android:layout_height="20dp"

android:background="@mipmap/del"

android:layout_gravity="right"/>

配置recyclerview和设置点击事件

recyclerview = (RecyclerView) findViewById(R.id.recyclerview);

recyclerview.setLayoutManager(new GridLayoutManager(this, 3));

if(imageUrls.size()==0){

imageUrls.add("hehe");

}

passengerAdapter = new PassengerAdapter(this, imageUrls);

recyclerview.setAdapter(passengerAdapter);

passengerAdapter.setOnItemClickLitener(new PassengerAdapter.OnItemClickLitener() {

@Override

public void onBigClick(int position) {

Log.d(TAG, "onBigClick: "+passengerAdapter.getItemCount());

Log.d(TAG, "onBigClick: "+position);

if (position==imageUrls.size()-1) {

//添加本地相册图片,更新视图

Intent intent = new Intent(PassengerSetActivity.this, MultiImageSelectorActivity.class);

intent.putExtra(MultiImageSelectorActivity.EXTRA_SHOW_CAMERA, true);

intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_COUNT, 9);

intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_MODE, MultiImageSelectorActivity.MODE_SINGLE);

startActivityForResult(intent, 10001);//10001-->添加

} else {

Intent intent = new Intent(PassengerSetActivity.this, MultiImageSelectorActivity.class);

intent.putExtra(MultiImageSelectorActivity.EXTRA_SHOW_CAMERA, true);

intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_COUNT, 9);

intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_MODE, MultiImageSelectorActivity.MODE_SINGLE);

poss = position;

startActivityForResult(intent, 10002);//10002-->修改

//修改图片,更新视图

}

}

@Override

public void onSmallClick(int position) {

imageUrls.remove(position);

passengerAdapter.notifyItemRemoved(position);

//删除图片,更新视图

}

});

选择完图片后,进行ui更新的操作

/**

* 返回图片url,并上传七牛

*

* @param requestCode

* @param resultCode

* @param data

*/

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if(data!=null){

if (requestCode == 10001 || requestCode == 10002) {

final ArrayList paths = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT);

Bitmap bitmap = BitmapFactory.decodeFile(paths.get(0), DIY_dialog.getBitmapOption(4));

//添加图片

if (requestCode == 10001) {

//将添加的图片放在第一位

imageUrls.add(0,paths.get(0));

//更新第一个位置的图片

passengerAdapter.notifyItemInserted(0);

}

//修改图片

else if (requestCode == 10002&&imageUrls.size()>0) {

int pos = poss;

imageUrls.set(pos,paths.get(0));

passengerAdapter.notifyItemChanged(pos);

}

}

}

}

大概就是这样了,简单的说一下思路,就是在存储图片的list的最后一项添加一个具有不同标识的数据,当点击时对应的标识和该标识一致,则添加,反之为修改。使用recylerview可以直接更新有变化的子项,而不用更新全部子项,用户体验更好,性能也提高了。

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

android 点动态显示图片,Android用RecyclerView实现动态添加本地图片相关推荐

  1. 用RecyclerView实现动态添加本地图片

    本文所用的多图选择的library来自:https://github.com/lovetuzitong/MultiImageSelector 简单介绍一下用法: 1.跳转到图片选择页面: Intent ...

  2. android仿微信发布动态功能,Android GridView扩展仿微信微博发图动态添加删除图片功能.pdf...

    Android GridView扩扩展展仿仿微微信信微微博博发发图图动动态态添添加加删删除除图图片片功功能能 这篇文章主要为大家详细介绍了Android GridView扩展仿微信微博发图动态添加删除 ...

  3. [Android] 通过GridView仿微信动态添加本地图片

    原文:http://blog.csdn.net/eastmount/article/details/41808179 前面文章讲述的都是"随手拍"中图像处理的操作,此篇文章主要讲述 ...

  4. android仿微博发动态,Android GridView扩展仿微信微博发图动态添加删除图片功能

    在平时的开发中,我们会看到不管是微信发朋友圈照片还是微博发布新鲜事,添加图片的时候都是选完后面还有个+号再去选择图片,这样的话比较方便用户去添加图片,有的右上角还有个-号方便用户去删除图片,而一般用户 ...

  5. Android GridView扩展仿微信微博发图动态添加删除图片

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53034123 [DylanAndroid的csdn博客] 在平时的开发中,我们 ...

  6. 【PDFBox】PDFBox操作PDF文档之添加本地图片、添加网络图片、图片宽高自适应、图片水平垂直居中对齐

    这篇文章,主要介绍PDFBox操作PDF文档之添加本地图片.添加网络图片.图片宽高自适应.图片水平垂直居中对齐. 目录 一.PDFBox操作图片 1.1.添加本地图片 (1)案例代码 (2)运行效果 ...

  7. android 文本分页显示,Android查看带有列表视图的分页器并动态添加文本

    我在一个分片活动中有一个Viewpager,它有一个带有编辑文本和发送按钮的botton框架. 在片段布局中,我有一个ListView,并在片段中附加了一个适配器.现在我正在实现从片段中的Parent ...

  8. vue如何动态渲染本地图片img

    动态渲染本地图片 <div class="wrap_left" v-for="item of array" :key="item.id" ...

  9. 百度地图自定义图标icon 添加本地图片无法显示问题解决

    百度地图自定义图标icon 添加本地图片无法显示问题解决 我们在阿里巴巴矢量库找的icon 保存到本地 结论 我们在阿里巴巴矢量库找的icon 保存到本地 链接: 阿里巴巴矢量库. 图片: 随便找一个 ...

最新文章

  1. 小技巧textbox的行数
  2. 魅族升级鸿蒙,魅族要“弯道超车”?率先升级鸿蒙OS,挥别安卓系统
  3. Java黑皮书课后题第5章:*5.1(统计正数和负数的个数然后计算这些数的平均值)编写程序,读入未指定个数的整数,判断读入的正数有多少个、负数有多少个,然后计算输入值的总和和平均值(不记0,浮点表示)
  4. 学习vim 从常用按键开始
  5. C# WebBrowser自动填表与提交
  6. Vue项目中自动将px转换为rem
  7. linux的日志系统,Linux上的日志系统
  8. 西瓜书+实战+吴恩达机器学习(十)监督学习之支持向量机 Support Vector Machine
  9. vSphere5.1升级5.5(二)——升级Esxi主机及vmware tools
  10. java数组元素的输入_java基础--键盘输入一个数,输出数组中指定元素
  11. java8时间类的好处_Java8——时间类
  12. SpringMVC初写(四)上传和下载功能的实现
  13. MacBook安装Mysql
  14. 教你如何用PS制作iOS端APP应用图标AppIcon.appiconset
  15. win10安装VMware PowerCLI
  16. 如何创建一个原始Mac OS镜像
  17. Angular4 - 组件
  18. 张爱玲 《烬余录》 阅感
  19. 【信号与系统】—知识点:无失真传输系统、理想低通滤波器
  20. php 使用dataview,jquery dataview数据视图插件使用方法

热门文章

  1. 修改oracle 安裝參數,oracle 安裝相關參數設定
  2. 服务器无法继续该事务 3400000006 错误原因--JAVA调用SQLSERVER存储过程时过程发生异常内部事务未
  3. 联想面试智力题,听说前面三道题必考(有部份解答)
  4. JAVA中用于处理字符串的 三兄弟
  5. 安卓案例:标准化测试
  6. 三角学——极坐标_2
  7. bzoj3993 [SDOI2015]星际战争 二分答案+网络流检验
  8. bzoj1051 受欢迎的牛 结论+tarjan
  9. 【英语学习】【WOTD】teetotaler 释义/词源/示例
  10. JavaScript面试小知识