RecyclerView瀑布流如何动态计算imageview的宽高
2016-06-27 18:01
316 查看
我们上一篇说到计算recyclerView均等的间距,在这个基础上我们要用瀑布流展示图片的时候,要想动态展示宽高的话,就要知道图片的宽高并且在adapter里面计算宽高,这个宽高可以让服务器获取当让我们也可以自己获取。
下面就说下实现方式吧
既然要动态适配宽高就要根据图片的宽度和手机的宽度计算出比率来然后根据这个比率来计算imageview的高度
这样我们就能实现瀑布流了
例子就是下面这篇博客里面的例子注意android:scaleType=”fitXY”必须是fitxy ( 例子中可能是centercrop 这是不对的)给位有用到的改下
http://blog.csdn.net/applicaton/article/details/51705165
下面就说下实现方式吧
既然要动态适配宽高就要根据图片的宽度和手机的宽度计算出比率来然后根据这个比率来计算imageview的高度
package com.jtech.scrollimageloaddemo; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.jtech.adapter.RecyclerAdapter; import com.jtech.view.RecyclerHolder; import java.util.ArrayList; import java.util.List; /** * 图片适配器 * 关于 同等间距的recycleView * 我们在xml文件里设置的距离是dp 在代码里设置的距离是px * 所以都在代码中设置统一格式就是同等编剧的recyclerview * Created by wuxubaiyang on 16/5/6. */ public class ImageAdapter extends RecyclerAdapter<ImageModel> { private boolean isScroll = false; private int itemWidth; public ImageAdapter(Activity activity) { super(activity); //计算item的宽度 itemWidth = (DeviceUtils.getScreenWidth(activity)-48) / 2; } public void setScroll(boolean scroll) { isScroll = scroll; if (!isScroll) { notifyDataSetChanged(); } } @Override public View createView(LayoutInflater layoutInflater, ViewGroup viewGroup, int i) { return layoutInflater.inflate(R.layout.view_item, viewGroup, false); } @Override public void convert(RecyclerHolder recyclerHolder, ImageModel imageModel, int i) { ImageView imageView = recyclerHolder.getView(R.id.imageview); //等比缩放 double ratio = (itemWidth * 1.0) / imageModel.getWidth(); int height = (int) (imageModel.getHeight() * ratio); ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams(); layoutParams.width = itemWidth; layoutParams.height = height; imageView.setLayoutParams(layoutParams); //显示图片 // if (isScroll) { // imageView.setImageResource(R.mipmap.ic_launcher); // } else { Glide.with(getActivity()).load(imageModel.getUrl()).placeholder(R.mipmap.ic_launcher).into(imageView); // } } }
在xml中
<ImageView android:id="@+id/imageview" android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="fitXY" android:src="@mipmap/ic_launcher" />
这样我们就能实现瀑布流了
例子就是下面这篇博客里面的例子注意android:scaleType=”fitXY”必须是fitxy ( 例子中可能是centercrop 这是不对的)给位有用到的改下
http://blog.csdn.net/applicaton/article/details/51705165
相关文章推荐
- python list常用操作
- leetcode 罗马数字与整数的转换算法
- 带宽计算
- Python3之configparser模块
- Python的GIL是什么鬼,多线程性能究竟如何
- WTL 如何获取OnMouseWheel 的鼠标信息
- 解决Mac外接显示器分辨率不正确问题
- javaweb学习总结(十六)——JSP指令
- CALayer 的简介 和Core Animation动画效果 A
- HoloLens开发手记 - Unity之Spatial Sounds 空间声音
- Spark的基本说明
- 【Objective-C】05-第一个OC的类
- 6410 内核的uboot-分析笔记
- Flask(11)-博客文章
- 关于IIS7.5下的web.config配置的一些问题
- i2c驱动程序
- DLL注入--设置消息钩子
- svn连接报错 Can't connect to host '*.*.*.*': 由于连接方在一段时间后没有正确答复或连接的主机没有响应,连接尝试失败。
- Android WebSocket通信通过Service来绑定
- socket.io 中namespace 和 room的概念。