-1

アプリケーションに起動画面のイメージビューがあります。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"/>

アクティビティ 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;
        }
    });
4

1 に答える 1

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)

したがって、最初の 2 つのパラメーターは取得したいものであり、この場合は 2 番目の 2 つのパラメーターを無視してもかまいません。

于 2013-04-25T07:38:43.060 に答える