我的应用程序中有一个启动屏幕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;
}
});
答案 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)
所以前两个参数是我认为你想得到的,在这种情况下你可以忽略第二个参数。