我想创建一个显示大量图像的图库。为此,我创建了一个带有ImageView [3]的适配器类,并使getView传递出ImageView [position%3]。我还设置适配器以使用异步加载的大位图填充ImageView。
由于fling可以滚动得比设备可以在图像中加载更快,因此我还有一个更长的缩略图数组(我最终也将用于缩略图库)。如果大位图不可用,则使用缩略图填充ImageView,然后在加载后使用大位图重新填充。
因此,我的问题令人沮丧:ImageView没有按照我想要的方式进行缩放。理想的行为是ImageView与其父级具有相同的高度,但具有与其内容相同的宽高比。但是,如果我使用以下代码填充ImageView []:
private void initializeStaticArrays() {
//initialize envelope arrays
for(int i=0; i<ENVELOPE_ARRAY_SIZE; ++i)
{
mEnvelopeViews[i] = new ImageView(mContext);
//make the views as wide as their content and as tall as their parent
mEnvelopeViews[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
//then make them scale the contained image
mEnvelopeViews[i].setScaleType(ImageView.ScaleType.FIT_CENTER);
mEnvelopeIds[i] = Gallery.INVALID_POSITION;
mBundles[i] = new BitmapFilePathBundle();
}
for(int i=0; i<THUMBNAIL_ARRAY_SIZE; ++i)
{
mThumbnailViews[i] = new ImageView(mContext);
if(mThumbnailParams!=null) mThumbnailViews[i].setLayoutParams(new Gallery.LayoutParams(mThumbnailParams));
mThumbnailViews[i].setScaleType(ImageView.ScaleType.FIT_CENTER);
mThumbnailIds[i] = Gallery.INVALID_POSITION;
}
}
一旦Gallery调用getView()它就会崩溃(请注意我在代码中的其他位置调用了setImageBitmap,并且在调用getView()之前肯定已经发生了这种情况)。我想这是一个算术循环,就像试图使位图拉伸以适应视图,这是试图包含位图,但我无法弄清楚布局参数的组合会给出我想要的结果。 / p>
那么:有没有办法让ImageView像其父级一样高,其内容缩放以适应正确的宽高比,并且ImageView的宽度与内容的宽度完全匹配?
编辑:崩溃是由LayoutParams到Gallery.LayoutParams的CastException引起的。将适当的行更改为:
//make the views as wide as their content and as tall as their parent
mEnvelopeViews[i].setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
修复了崩溃,但仍无法解决缩放问题。
答案 0 :(得分:0)
不幸的是,在没有针对此问题的任何自动缩放解决方案的情况下,我最终手动将视图调整为特定尺寸,然后使用Matrix
个对象来确定每个图像如何适合这些尺寸。