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

Android用RecyclerView实现动态添加本地图片,第1张

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

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

本文所用的多图选择的library来自:https://github.com/lovetuzitong/MultiImageSelector

简单介绍一下用法:

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<String> 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<PassengerAdapter.VIEwHolder> {  private Context mContext;  private OnItemClicklitener Listener;//点击事件接口  private ArrayList<String> imageUrls;  private ImageFetcher imageFetcher;  private VIEwHolder vIEwHolder;  private VIEw vIEw;  /**   * 在构造方法中传入图片地址的数据   * @param context   * @param imageUrls   */  public PassengerAdapter(Context context,ArrayList<String> 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.@R_301_1715@();        }//        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的布局文件

<?xml version="1.0" enCoding="utf-8"?><FrameLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent">  <FrameLayout    androID:ID="@+ID/lay_group"    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content">    <ImageVIEw      androID:ID="@+ID/imageVIEwBig"      androID:layout_wIDth="120dp"      androID:layout_height="120dp"      androID:background="@mipmap/background"      />    <ImageVIEw      androID:ID="@+ID/imageVIEwSmall"      androID:layout_wIDth="20dp"      androID:layout_height="20dp"      androID:background="@mipmap/del"      androID:layout_gravity="right"/>  </FrameLayout></FrameLayout>

配置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,10001);//10001-->添加        } else {          Intent intent = new Intent(PassengerSetActivity.this,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<String> 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用RecyclerView实现动态添加本地图片全部内容,希望文章能够帮你解决Android用RecyclerView实现动态添加本地图片所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1144834.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存