项目中要实现图片自适应高度的瀑布流,咋样自适应高度呢?

1.item的高度宽度要wrap_content
2.获得图片的高度宽度
3.onBindViewHolder中绑定数据的时候,先获取item宽度,计算图片等比例缩放后的高度,为imageView设置参数

关键代码如下:
mRecyclerView = findViewById(R.id.recyclerview);mRecyclerView.setPadding(8,8,8,8);mRecyclerView.addItemDecoration(new SpacesItemDecoration(8));layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);mRecyclerView.setLayoutManager(layoutManager);imageAdapter = new ImageAdapter(context,mData);mRecyclerView.setAdapter(imageAdapter);
public void onBindViewHolder(ImageViewHolder holder, int position) {    final ImageData data = mData.get(position);    //获取item宽度,计算图片等比例缩放后的高度,为imageView设置参数    ViewGroup.LayoutParams layoutParams = holder.imageView.getLayoutParams();    float itemWidth = (ScreenUtils.getScreenWidth(context) - 16*3) / 2;    layoutParams.width = (int) itemWidth;    float scale = (itemWidth+0f)/data.getWidth();    layoutParams.height= (int) (data.getHeight()*scale);    holder.imageView.setLayoutParams(layoutParams);    Glide.with(context).            load(data.getResourceId()).            override(layoutParams.width, layoutParams.height).            into(holder.imageView);}
    itemView的宽度 = (屏幕的宽度-三个间隔(每个间隔是16))/ 2
效果图:

做了一个Demo,Demo中的图片都是放在drawable中的,不是url.
Demo地址:https://download.csdn.net/download/vida990717/11058264

本来以为这样就行了呢,结果实际中加了点击事件以后又遇到问题啦~~
滑动到最后,点击最后一个item,重新滑回最上面,最上面的item跳动,位置变了,有空白的区域。

在网上找了找,用下面的方法解决了这个问题:

layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {    @Override    public void  onScrollStateChanged(RecyclerView recyclerView, int newState) {        //防止第一行到顶部有空白区域        layoutManager.invalidateSpanAssignments();    }});

更多相关文章

  1. Android:保存图片到Sqlite数据库
  2. android 获取字符串在屏幕中所占像素宽度和高度
  3. Android(安卓)获得软键盘状态
  4. Android(安卓)Training精要(三)不同分辨率图片缩放倍数
  5. Flutter 新闻客户端 - 09 详情页展示、分享、远程真机调试
  6. Android圆形图片或者圆角图片的快速实现
  7. Android实现记事本功能
  8. 获取手机的视频和图片的缩略图
  9. ListView的item高度调整

随机推荐

  1. Android--高效地加载大图片
  2. 编程总结:Android(安卓)读写文件
  3. Android 日历开发教程[五]
  4. 2020版本Android 开发者学习路线(热门技
  5. Android Binder机制浅析及AIDL的使用
  6. Android消息通知-Notification
  7. Android Studio的使用
  8. Activity状态保存
  9. Android root权限获取原理详解
  10. Android下常见的内存泄露 经典