2011-09-01 13 views
9

私は簡単な質問があります: ImageViewに追加するか、ImageViewでビットマップのサイズを変更する前に、より大きなビットマップのサイズを変更する必要がありますか? パフォーマンスに関する正しい方法は何ですか?ImageViewに追加する前にビットマップのサイズを変更するか、ImageViewでビットマップのサイズを変更する必要がありますか?

おかげ

+0

あなたが固定ピクセルサイズ(すなわち,. PX)、または密度/規模の独立した(すなわち、DP/SP)のサイズにスケーリングされていますか? –

+0

ディップスに。ビットマップがImageViewsの高さ/幅(約10%)よりわずかに大きいということを忘れてしまいました。 – Benjamin

+0

少し大きければ 'setScaleType'を使ってください。大きさが大きければ、ロード中およびロード後に縮小することをお勧めします。 – Dave

答えて

11

はImageViewのためのスケールを使用することを検討して、サイズ変更については気にしないでください。

image.setAdjustViewBounds(true); 
image.setMaxHeight(50); 
image.setMaxWidth(50); 
image.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
+0

画像が1000×1000で、50×50が必要な場合は、これが本当に最善の方法ですか?私には効率的ではないようだ。 – Ricky

+0

画像をトリミングしたり、サイズを変更したりすると、画質が低下する可能性があります。スケーリングは、画質を維持するための最良の方法です。 – Arkde

1

大きな画像、大きいサイズは、私はパフォーマンスが本当に影響を受けるだろうと思いますが、効率的なものを維持しません。

また、異なる解像度のための異なるフォルダに異なるサイズの画像を置くことができます:

res/drawable-mdpi/my_icon.png  // bitmap for medium density 
res/drawable-hdpi/my_icon.png  // bitmap for high density 
res/drawable-xhdpi/my_icon.png  // bitmap for extra high density 

Supporting different size screens

1

bitmap.createScaledBitmapを使用して既存のビットマップのサイズを変更することができます。以下のコードを使用してください。

bmp=Bitmap.createScaledBitmap(bmp,destBitmapWith, destBitmapHeight,true); 
+0

私がBitmapFactoryとして探していたのは、不変のビットマップを返します。 –

1

あなたは次のように行うことができます。

ImageView imageView = (ImageView) findViewById(R.id.imageView); 
     imageView.setAdjustViewBounds(true); 
     imageView.setMaxHeight(imageView.getHeight()); 
     imageView.setMaxWidth(imageView.getWidth()); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
関連する問題