当前位置:网站首页>5.使用RecyclerView优雅的实现瀑布流效果
5.使用RecyclerView优雅的实现瀑布流效果
2022-08-02 14:05:00 【爱上学习啊】
/** * 作者:Pich * 原文链接:http://me.woblog.cn/ * QQ群:129961195 * 微信公众号:woblog * Github:https://github.com/lifengsofts */
概述
从前我们想实现一个瀑布流效果是很难得,需要自己自定义控件,可以说是很麻烦,而且性能也好优化,但是现在就不一样了,因为RecyclerView到来了,他可以很方便的实现瀑布流效果。下面就来看看吧,先来一张效果图:
使用StaggeredGridLayoutManager
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,
LinearLayoutCompat.VERTICAL);
rv.setLayoutManager(layoutManager);
然后需要注意的就是在Adapter里面需要动态计算图片的高度和宽度。
计算Item的高度
我们这里使用的是Glide图片加载框架,其他图片加载框架也有类似的方法,我们需要做的就是在图片加载回来拿到图片的高度和宽度动态计算Item的高度。
Glide.with(WaterfallFlowActivity.this).load(d).diskCacheStrategy(DiskCacheStrategy.ALL)
.into(new SimpleTarget<GlideDrawable>() {
@Override
public void onResourceReady(GlideDrawable resource,
GlideAnimation<? super GlideDrawable> glideAnimation) {
Log.d("TAG", iv.getWidth() + "," + resource.getIntrinsicWidth());
//计算ImageView的高度
int imageWidth = resource.getIntrinsicWidth();
int imageHeight = resource.getIntrinsicHeight();
int imageViewWidth = iv.getWidth();
double scale = imageWidth * 1.0 / imageViewWidth;
LayoutParams layoutParams = iv.getLayoutParams();
layoutParams.height = (int) (imageHeight / scale);
iv.setLayoutParams(layoutParams);
iv.setImageDrawable(resource);
}
});
现在效果其实就已经差不多出来了,但是还有一些优化的细节需要处理。
边栏推荐
猜你喜欢
随机推荐
C语言初级—从键盘接收一个整形并逆序输出
C语言一维数组练习——将一个字符串中的某个字符替换成其它字符
yolov5 improvement (1) Add attention focus mechanism
Flask contexts, blueprints and Flask-RESTful
ToF相机从Camera2 API中获取DEPTH16格式深度图
我理解的学习金字塔
[VCU] Detailed S19 file (S-record)
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第七章)
主存储器(一)
MySQL知识总结 (八) InnoDB的MVCC实现机制
static关键字3种作用,简单粗暴对比,好理解
浮点数的运算方法
标签加id 和 加号 两个文本框 和一个var 赋值
A little thought about password encryption
数据的表示方法和转换(二进制、八进制、十进制、十六进制)
mysql常用函数
spark写sql的方式
St. Regis Takeaway Notes - Lecture 10 Swagger
MySQL知识总结 (九) 用户与用户权限管理
自定义UDF函数