【发布时间】:2016-10-05 05:07:49
【问题描述】:
我在RecyclerView 中的 ImageView 有一些问题。我正在创建一个漫画查看器,我加载了很长的图像。我将图像切成 8 部分,以便我的 ImageView 可以处理它们。问题是在RecyclerView 上加载图像时。
我正在使用Glide,当Glide 加载分段部分时,延迟非常明显。由于图像缓存,这是可取的,它工作得很好,但它留下了不良影响。我无法显示实际图像,因为它发生得非常快,但我可以使用 ASCII 表示它:
例如,这是我在启动时的RecyclerView:
---------------Segment1
#.........................
#.........................
#.........................
#.........................
#.........................
#.........................
---------------Segment2
---------------Segment3
---------------Segment4
#.........................
#.........................
#.........................
#.........................
#.........................
#.........................
正如您在此处看到的,Glide 尚未完成对 Segment2 和 Segment3 的加载,实际上,显示 Segment1 和 Segment4 拼接在一起。突然Segment2 和Segment3 不存在了,这不是很好。
即使我将它放在ScrollView 上并动态添加ImageView 到其中,效果也是一样的。我无法在 ImageView 的宽度和高度上分配恒定的 px/dip,原因很明显,因为我需要处理多种屏幕尺寸。
我的ImageView 设置如下所示:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageview_comic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:adjustViewBounds="true"/>
</LinearLayout>
当我绑定到这个 ImageView 时,这是我正在做的事情:
private void bindSegment(ComicViewHolder holder, int position)
{
File file = mSegments.get(position);
Point imageSize = Constants.getImageSize(file);
Point screenSize = Constants.getScreenSize(mContext);
ImageView imageView = holder.mImageViewComic;
Glide.with(imageView.getContext())
.load(file.getAbsolutePath())
.override(imageSize.x , imageSize.y)
.crossFade(0)
.into(imageView);
}
如果我通过getLayoutParams() 分配基于ImageView 的恒定像素宽度/高度,我可以让它在一部手机而不是另一部手机上工作。我不能以这种方式硬编码ImageView 大小。 Glide.override 似乎没有像我预期的那样工作。我需要我的ImageView 根据正在加载的图像的大小知道它的当前尺寸,以便它填充加载的片段之间的间隙并且不会突然消失。
有什么想法吗?
【问题讨论】:
标签: android imageview android-imageview android-glide