0

ImageView1つの中に複数のを描画しようとしていLinearLayoutます。

すべてのImageViewsは単一のビットマップを持っている必要があります。ImageViewのサイズは異なります。単一のビットマップはサイズ変更されません。

簡単な方法は、ImageViewごとに1つのビットマップを作成することです。しかし、これはすぐにメモリを使い果たします。

final Bitmap placeholderBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
final Canvas canvas = new Canvas(placeholderBitmap);
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.placeholder_image), 0, 0, null);
imageView.setImageBitmap(placeholderBitmap);
linearLayout.addView(imageView);

また、最大と最小の高さと幅を設定してみましたが、効果はありません。画像は同じサイズのままです。

imageView.setImageResource(R.drawable.ic_no_image);
imageView.setMaxHeight(imageViewInfo.height);
imageView.setMaxWidth(imageViewInfo.width);

sを使用するDrawableのが正しい「Android」の方法だと思いますが、右側でDrawableを動的に作成し、共有ビットマップをその中にレイヤー化する方法を見つけることができません。

4

3 に答える 3

1

ImageViewは、常にビットマップのサイズを必要な比率に変更します。

メモリを節約したい場合は、ビットマップのサイズを手動で変更してImageViewに設定すると、ImageViewが内部でサイズ変更するのを防ぐことができます。確かに、画像ビューのlayout_widthとlayout_hieghtを「wrap_content」に設定できます。

于 2012-08-24T14:36:57.440 に答える
1

1つだけ使用Bitmapしてください-あなたが言うように、それらはすべて同じものを使用するBitmapので、複製は必要ありません。

ImageViewsのサイズを変えて、Bitmapスケール自体をのサイズにしたい場合は、 or属性をImageView使用してのスケーリングを設定します。たとえば、画像のアスペクト比を維持し、左上隅から開始して塗りつぶそうとします。setScaleTypeandroid:scaleTypeImageViewFIT_STARTImageView

を作成する必要はありませんが、必要な場合は、次を使用してDrawable作成することができます。Bitmap

Drawable d = new BitmapDrawable(bitmap); 

ImageViewを呼び出すと、実際にはこれが自動的に行われますsetImageBitmap(...)

于 2012-08-24T15:17:11.527 に答える
0

ClipDrawableを探しているのではないかと思います。

android:drawableクリップXMLのプロパティをビットマップに設定します

それとも、例に示されているJavaコードでそれを行うことができます

于 2012-08-24T15:16:45.483 に答える