完美解决glide+StaggeredGridLayoutManager 图片加载大小不正常的问题
来源:互联网 发布:电脑制作漫画软件 编辑:程序博客网 时间:2024/05/07 19:36
先说下我的目标,公司要求每张图片宽度是充满item的,高度是根据图片高度缩放的,所以要求用瀑布流实现,
但是我当我用SwipeToLoadLayout 做下拉刷新的时候,发现每次加载图片,大小都有可能不一样,但是 首次加载的时候.
图片显示是正常的,我猜测,这个跟glide的图片缓存有关系,
但是当我设置 glie的skipMemoryCache(true),不让他缓存
还有DiskCacheStrategy.RESULT dontransform 各种属性全试了一遍,发现还是没达到效果.那么可以排除glide的
锅,应该是recyclerview的图片缓存除了问题,如果有兴趣的同学可以去研究下recyclerview的缓存机制
下面我说下我研究一天的解决方案:
思路就是在第一次用glide 拿到图片之后,就取bitmap的宽高,然后 按照宽高比获取图片高度,因为图片宽度是定死的
我这个2列的瀑布流, 宽度就取屏幕一半. 然后 这个宽高 同时去改变 imageview的宽高和bitmap的宽高.这样就能保证图片不变形,而且,每次下拉刷新的时候都不会改变其大小.
下面是我的关键代码,如果有疑问可以加我qq:385813241,虽然挺简单,但是我相信有人需要
先说下图片设置的属性
<ImageView android:id="@+id/work_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="fitCenter" android:src="@drawable/ic_launcher" />
fitCenter 表示充满view的宽度,高度按照原图比例显示
在Recyclerview的adapter里面
public void onBindViewHolder(final MyHolder holder, final int position) { //为了方便阅读,我在这边定义个变量 ImageView imageView;//你要加载图片的容器 Glide.with(act) .load("图片url") .asBitmap() .into(new SimpleTarget<Bitmap>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) { @Override public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) { //这个bitmap就是你图片url加载得到的结果 //获取bitmap信息,可赋值给外部变量操作,也可在此时行操作。 LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) imageView.getLayoutParams();//获取你要填充图片的布局的layoutParam layoutParams.height = (int) (((float) bitmap.getHeight()) / bitmap.getWidth() * ScreenUtils.getScreenWidth(act) / 2 ); //因为是2列,所以宽度是屏幕的一半,高度是根据bitmap的高/宽*屏幕宽的一半 layoutParams.width = ScreenUtils.getScreenWidth(act) / 2;//这个是布局的宽度 imageView.setLayoutParams(layoutParams);//容器的宽高设置好了 bitmap = zoomImg(bitmap, layoutParams.width, layoutParams.height); // 然后在改变一下bitmap的宽高 holder.workImage.setImageBitmap(bitmap); } }); }}
//改变bitmap尺寸的方法
public static Bitmap zoomImg(Bitmap bm, int newWidth, int newHeight) { // 获得图片的宽高 int width = bm.getWidth(); int height = bm.getHeight(); // 计算缩放比例 float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // 取得想要缩放的matrix参数 Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); // 得到新的图片 Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true); return newbm;}//获取屏幕宽度的方法public static int getScreenWidth(Context context){ WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.widthPixels;}
1 0
- 完美解决glide+StaggeredGridLayoutManager 图片加载大小不正常的问题
- 完美解决glide+StaggeredGridLayoutManager 图片加载大小不正常的问题
- 解决Glide加载图片问题!!!
- ScrollView嵌套listview。listview里面的图片加载用glide,解决图片加载不全的问题
- 使用StaggeredGridLayoutManager瀑布流,Glide显示图片
- Glide加载图片的变形问题
- 解决Glide加载网络圆角图片先显示完整图片的问题
- 解决Glide加载网络圆角图片先显示完整图片的问题
- 解决Glide加载圆形图片,第一次只显示点位图的问题
- 自定义BitmapTransformation完美解决Glide加载圆角或者圆形图片
- Glide加载图片变色问题
- glide加载图片变形问题
- glide:Glide Module 案例: 通过加载自定义大小图片优化
- 解决office word图片显示不正常问题
- Glide圆形图片的加载
- Glide 加载圆形图片CircleImageView遇到的问题
- 使用glide框架加载图片遇到的一些问题
- Glide与CircleImageView加载圆形图片的问题
- Visual Studio中一个查找代码的方法
- redis
- unit2.10selinux 的管理
- Python的Django
- 数段简单趣味的JavaScript代码
- 完美解决glide+StaggeredGridLayoutManager 图片加载大小不正常的问题
- 多线程之多线程的创建
- java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLo
- CodeForces 643 B.Bear and Two Paths(构造)
- mybatis查询,sql语句没问题但是查不出结果
- 二叉树的三种非递归遍历
- 视频码流分析工具
- 图的基本操作【严蔚敏】
- 蓝桥杯入门训练 序列求和 JAVA