代码之家  ›  专栏  ›  技术社区  ›  jkstar

在onCreate期间将缩放位图设置为ImageView

  •  -1
  • jkstar  · 技术社区  · 11 年前

    我的应用程序中有一个启动屏幕图像视图。我正在将与我的应用程序捆绑在一起的png文件转换为位图,因为png的分辨率更高。当图像视图即将绘制时,我正在图像视图的回调函数中进行解码和缩小。我需要位图来填充整个屏幕。但有时它并没有被绘制,因为它将视图的宽度和高度设置为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"/>
    

    在“创建活动”功能中:

    mImageView.getMeasuredWidth()和mImageView.GetMeasuredReight()有时会为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 回复  |  直到 11 年前
        1
  •  1
  •   kselos    11 年前

    如果你在屏幕上实际绘制视图之前就得到了视图的大小,那么通过getMeasuredWidth()和getMeasuredReight()就无法获得合适的图像大小,因为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)

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