为适合Gallery中Android高度的Gallery创建ImageView

时间:2011-07-14 12:19:56

标签: android gallery imageview zoom

我想创建一个显示大量图像的图库。为此,我创建了一个带有ImageView [3]的适配器类,并使g​​etView传递出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));

修复了崩溃,但仍无法解决缩放问题。

1 个答案:

答案 0 :(得分:0)

不幸的是,在没有针对此问题的任何自动缩放解决方案的情况下,我最终手动将视图调整为特定尺寸,然后使用Matrix个对象来确定每个图像如何适合这些尺寸。