1

カスタム ビューで特定のサイズのビットマップを読み込みたい。最初のステップとして、400px x 400px のビューに 400px x 400px のビットマップをロードしたかったのですが、ビットマップは小さいサイズでロードされます。

同様の問題を持ついくつかのスレッドを見つけました。の使用を勧められましたOptions.inScale = false。私はそれを使用し、より良いログメッセージを取得しました (ビットマップ出力は正しいサイズ 400px x 400px) が、それでも小さく表示されます:

ここに画像の説明を入力

(黄色はカスタム ビューの背景 - 400px x 400px、赤色はビットマップ)。

何かアドバイスはありますか?コードは次のとおりです。

カスタム ビュー:

class TestView extends View {
    private Bitmap bitmap;
    private Paint paint = new Paint();

    public TestView(Context context) {
        super(context);
    }

    public TestView(Context context, AttributeSet attr) {
        super(context, attr);

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inScaled = false;

        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.overlay, options).copy(Config.ARGB_8888, true);  
        Log.d("test6", "width: " + bitmap.getWidth() + " height: " + bitmap.getHeight());
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawBitmap(bitmap, 0, 0, paint);
    }
}

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000000"
    >
    <com.example.TestView
        android:id="@+id/view"
        android:layout_width="400px"
        android:layout_height="400px"
        android:background="#ffff00"
        />
</RelativeLayout>

ビットマップはすでに 400px x 400px です...そのため、スケーリング オプションなどを使用する必要はないと思います。このサイズで画面に表示したいだけです...

4

1 に答える 1

2

ほとんどのBitmap場合、フォルダー内にないため、drawable-nodpiスケーリングされています。

Canvas.drawBitmapのドキュメントによると:

ビットマップとキャンバスの密度が異なる場合、この関数は、キャンバスと同じ密度で描画するようにビットマップを自動的にスケーリングします。

于 2013-03-14T14:32:51.397 に答える