2011-01-25 20 views
5

風景や肖像画の両方を保持できるImageViewを実装しようとしています。 これらの画像は、画像ビューの幅(横長の場合)または高さ(縦長の場合)に合わせる必要がありますが、いずれの場合も余白やパディングなしでビューの上部に揃えなければなりません。Android ImageView ScaleType * FIT_TOP *

android:scaleType="fitStart"でものようなもので、ポートレート画像の場合は、風景画像の場合は上に揃えます。

を追加しました:

今、私が動作しているような醜いコードを、使用していますが、わからないことが最善の解決策である:

<com.custom.layout.MyImageView 
     android:id="@+id/detail_view_image" 
     android:src="@drawable/logo" 
     android:background="#fff" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_centerHorizontal="true" 
     android:cropToPadding="false" 
     android:adjustViewBounds="false" 
/> 

、その後、私のクラスでは、それはImageViewの私を拡張操作を行います。

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int imgWidth = getDrawable().getIntrinsicWidth(); 
     int imgHeight = getDrawable().getIntrinsicHeight(); 

     if(imgWidth>imgHeight) 
      setScaleType(ScaleType.FIT_START); 
     else 
      setScaleType(ScaleType.FIT_CENTER); 

     int width = measureWidth(widthMeasureSpec); 
     int height = measureHeight(heightMeasureSpec);  

     setMeasuredDimension(width, height); 
    } 
+0

私はこれに似た何かをしたいと思っています。 –

+0

これまで運がなかったので、私は上に投稿したコードを使用して終了しました... – 0m4r

+1

ok、コードありがとう! –

答えて

2

代わりにオーバーライドネイティブビューのあなただけの携帯電話の向きに応じてのonCreate()ImageViewののscaleTypeを変更する方法でスニペットを置くことができます。

いくつかの例のスニペット(私はそれだけでアイデアを得るためにそれと同じように動作を確認していない)、のonCreateメソッドで :姿勢の変化が起こっているときに、その後のonCreateが再び呼び出されます

ImageView imgView = findViewById(R.id.myImage); 
//portrairt orientation 
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
    imgView.setScaleType(ScaleType.FIT_CENTER); 
} else { //landscape orientation 
    imgView.setScaleType(ScaleType.FIT_START); 
} 

ビューのスケールタイプを変更し、onConfigurationChanged()をオーバーライドする場合は、必要に応じて上記のスニペットを再度追加する必要があります。 試してみてください。それが動作すれば教えてください

+0

確認?討論? – 10s

関連する問題