在onCreate期间将Scaled Bitmap设置为ImageView

时间:2013-04-25 06:31:48

标签: android android-widget

我的应用程序中有一个启动屏幕imageview。我将我的应用程序捆绑的png文件转换为位图,然后将其缩放,因为png的分辨率更高。当它即将绘制时,我正在对该imageview的回调函数进行修饰和缩小。我需要位图来填满整个屏幕。但有时它不会被绘制,因为它将视图的宽度和高度设置为0.它仅在某个时间出现。我认为这不是正确的做法。请建议我最好的解决方案。

<com.example.myImageView
    android:id="@+id/ovation_background"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:contentDescription="@string/background_screen"
    android:background="@color/black"/>

在Activity onCreate函数中:

mImageView.getMeasuredWidth()和mImageView.getMeasuredHeight()有时会变为0。

ViewTreeObserver vtoBackgroundView = mImageView.getViewTreeObserver();
vtoBackgroundView.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

        @Override
        public boolean onPreDraw() {
            Bitmap bitmap = decodeSampledBitmapFromResource
                            (getResources(), R.drawable.launch_screen, 
                             **mImageView.getMeasuredWidth()**, 
                             **mImageView.getMeasuredHeight()**);
            if ( bitmap != null )
            {
                mImageView.setBackgroundBitmap(bitmap);

            }
            ViewTreeObserver obs2 = mImageView.getViewTreeObserver();
            obs2.removeOnPreDrawListener(this);
            return true;
        }
    });

1 个答案:

答案 0 :(得分:1)

如果在实际在屏幕上绘制之前获得了视图的大小,则getMeasuredWidth()和getMeasuredHeight()无法获得适当大小的图像,因为android不知道基于实际的视图有多大屏幕配置。

您可以考虑通过在onSizeChanged中获取实际屏幕尺寸(int w,int h,int oldw,int oldh)。

http://developer.android.com/reference/android/view/View.html#onSizeChanged(int, int, int, int)

该方法的第一次调用为您提供了这样的信息(实际视图宽度,实际视图高度,0,0)

所以前两个参数是我认为你想得到的,在这种情况下你可以忽略第二个参数。