3

画面デバイスに大きな Y マージンを持つ ImageView を配置したいと考えています。これは、画像の一部が画面からはみ出し、画像がトリミングされることを意味します。

問題は、Android が画面内に収まるように画像を常にスケーリングしていることですが、それは望ましくありません。画像をトリミングしたいのです。

ImageView をトリミングしてサイズ変更しないようにするにはどうすればよいですか?

PS 可能なすべての ScaleType プロパティを試しましたが、どれもうまくいきませんでした!

コード :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="200dp"
    android:background="@drawable/my_image"
    android:scaleType="centerCrop"
    />      

</RelativeLayout>
4

2 に答える 2

4

に置き換えandroid:backgroundてみてくださいandroid:src

于 2012-08-07T20:21:24.947 に答える
3

コードの最初の問題は、次を使用したことです。

android:background="@drawable/my_image"

それ以外の:

android:src="@drawable/my_image"

(バックグラウンドでは、scaleType オプションはどれも機能しません)。

それでも問題が解決しない場合は、おそらく scaleType="matrix" を使用して、必要なジョブを実行するマトリックスを作成する必要があります。たとえば、次のことを行うとします。

  • 画像の比率を維持する
  • 幅パラメータが X と等しくなるように画像をスケーリングします (例: X は画面の幅にすることができます)。
  • 画像の上部を見えるようにします(画像の下部をトリミングします)-これがcenterCropが機能しない理由だと思います

コードは次のとおりです。

ImageView imgView = (ImageView)findViewById(R.id.my_image_view);    
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
    R.drawable.my_image);

Matrix matrix = new Matrix();
// Let's assume X = 400
float scale = ((float) 400) / bitmap.getWidth();
matrix.setScale(scale, scale);

imgView.setImageMatrix(matrix);

また、xml ファイルに必要な変更を加えることを忘れないでください。

于 2012-08-07T21:01:35.583 に答える