2010-11-25 16 views
0

私はandroid:theme="@android:style/Theme.Dialog"を使用するアクティビティを持っています。アクティビティには、異なる次元の画像を表示できるImageViewが含まれています。 ImageViewは、少なくとも軸に完全にフィットし、元のアスペクト比を維持するように、ウィンドウに完全に収まるように画像を拡大縮小する必要があります。ダイアログのサイズは、ImageViewと同じ大きさでなければなりません(境界線の幅に加えて)。ダイアログスタイルのアクティビティでイメージを最大サイズに拡大する方法

私は次のことを試してみましたが、ダイアログウィンドウは、常に全体の利用可能なスペースを使用しています。

<?xml version="1.0" encoding="UTF-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/imageParent" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dip"> 
    <ProgressBar 
     android:id="@android:id/progress" 
     android:layout_width="40dip" 
     android:layout_height="40dip" 
     android:layout_centerInParent="true" 
     android:visibility="gone" 
     style="@android:attr/progressBarStyleSmallTitle"/> 
    <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:adjustViewBounds="true" 
     android:scaleType="fitCenter" 
     android:id="@+id/image"/> 
</RelativeLayout> 

答えて

0

私が自分で解決策を見つけましたが、私はそれがどのような状況で、正しいことをしている場合、完全にはわかりません。 私はImageViewの(CustomImageView)のサブクラスを作成し、以下のようonMeasure()メソッドを定義した:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    Drawable drawable = getDrawable(); 
    if (drawable != null) { 
     int measureHeight = View.MeasureSpec.getSize(heightMeasureSpec); 
     int measureWidth = View.MeasureSpec.getSize(widthMeasureSpec); 

     int resultWidth = measureWidth; 
     float scaleFactor = (float)resultWidth/drawable.getMinimumWidth(); 
     int resultHeight = (int)(scaleFactor * drawable.getMinimumHeight()); 

     if (resultHeight > measureHeight) { 
      resultHeight = measureHeight; 
      scaleFactor = (float)resultHeight/drawable.getMinimumHeight(); 
      resultWidth = (int)(scaleFactor * drawable.getMinimumWidth()); 
     } 

     setMeasuredDimension(resultWidth, resultHeight); 
    } else { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 

} 

私のレイアウトは現在、以下のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/imageParent" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dip"> 
    <ProgressBar 
     android:id="@android:id/progress" 
     android:layout_width="40dip" 
     android:layout_height="40dip" 
     android:layout_centerInParent="true" 
     style="@android:attr/progressBarStyleSmallTitle" 
     android:visibility="gone"/> 
    <com.example.CustomImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:scaleType="fitCenter" 
     android:id="@+id/image"/> 
</RelativeLayout> 
関連する問題