1

私のアプリケーションは、スマートフォンのカメラで写真を撮ります。写真をキャプチャした後、写真を ImageView に割り当てたいと思います。しかしその後、ImageView のサイズが変わります。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE
    && resultCode == Activity.RESULT_OK) {

  ContentResolver cr = getContentResolver();
  Bitmap bitmap = null;
  Bitmap scaledBitmap  = null;
  InputStream in = null;
  Image image = this.getActualImage();      

  try {
    in = cr.openInputStream(this.imageUri);
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inSampleSize = 1;
    bitmap = BitmapFactory.decodeStream(in, null, o);

    ImageView view = null;
    view = (ImageView) findViewById(R.id.img_face1);                  

    int height = view.getHeight();
    int width = view.getWidth();
    Log.i(TAG, "Scale operation dimenions - width: " + width
        + ", height: " + height);

    scaledBitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
    view.setImageBitmap(scaledBitmap);
    System.gc();
    in.close();
  } catch (Exception e) {
    Log.e("Camera", e.toString());
  } 

私のレイアウト xml は次のようになります。

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/screen_capture_face2"
    style="@style/linearLayoutVertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:weightSum="2" >

    <ImageView
        android:id="@+id/img_face1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:contentDescription="@string/desc_dummy_face"
        android:src="@drawable/dummy_face"
         />

    <ImageView
        android:id="@+id/img_face2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:contentDescription="@string/desc_dummy_face"
        android:src="@drawable/dummy_face"
         />

</LinearLayout>

ビットマップを ImageView img_face1 に割り当てた後、サイズが変わります。なぜこれが起こるのですか?私は何が欠けていますか?私はAndroidが初めてで、ちょっとした間違いかもしれません。

4

1 に答える 1

3

まず、 に設定adjustViewBoundsしていtrueます。それのリファレンスには次のように書かれています。

ドローアブルの縦横比を維持するために ImageView の境界を調整する場合は、これを true に設定します。

それを削除してみて、さらにオプションを追加してscaleType="fitCenter"、画像ビューではなくサイズ変更される画像にすることもできます。wrap_contentまた、レイアウト属性の値を変更することもできます。これは、このビューをコンテンツ全体を表示するのに十分な大きさにすると言われているためです。

于 2012-06-05T18:07:15.047 に答える