5.使用RecyclerView优雅的实现瀑布流效果

/**
 * 作者: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);
    }
  });

现在效果其实就已经差不多出来了,但是还有一些优化的细节需要处理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值