25

これは私のアクティビティの一部です:

private ImageView mImageView;
private int resource;

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  resource = getIntent().getIntExtra("res", -1);

  Matrix initMatrix = new Matrix();

  mImageView = new ImageView(getApplicationContext());
  mImageView.setScaleType( ImageView.ScaleType.MATRIX );
  mImageView.setImageMatrix( initMatrix );
  mImageView.setBackgroundColor(0);
  mImageView.setImageResource(resource);
}

マトリックスをスケールタイプとして使用して、ImageView内に画像を表示しようとしています(後でマルチタッチを追加したい)。しかし、ユーザーがインタラクションを開始する前に、画像を中央に配置し、ImageView内に収めたいと思います。解決方法についてはすでに答えを見つけましたが、問題が1つあります。それは、マトリックスを使用して画像を中央に配置するには、その幅と高さを知る必要があるということです。あなたが持っているのがintリソースだけであるときに画像サイズを取得する方法はありますか?

4

2 に答える 2

49

BitmapFactory.decodeResourceを使用してリソースのビットマップオブジェクトを取得すると、ビットマップからgetHeightgetWidthを使用して画像の幅/高さを簡単に取得できます。

また、ビットマップをリサイクルすることを忘れないでください

編集:

このようにnullして、出力としてビットマップを取得しますが、BitmapFactory.Optionsは、ビットマップのwithとheightで設定されます。したがって、この場合、ビットマップをリサイクルする必要はありません

BitmapFactory.Options dimensions = new BitmapFactory.Options(); 
dimensions.inJustDecodeBounds = true;
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bitmap, dimensions);
int height = dimensions.outHeight;
int width =  dimensions.outWidth;
于 2012-03-11T14:15:48.210 に答える
11

dmonのコメントを読んでいない人のために。これを行うためのコードは次のようになります。

final Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.your_photo, opt);

opt.outHeight; // height of resource
opt.outWidth; // width of resource
于 2012-08-03T13:50:28.233 に答える