2012-09-05 6 views
4

의 항목이있는 ListView이 있는데, 설명의 편의를 위해. 이미지를 너비 '행의 크기로 조정하고 가로 세로 비율을 유지합니다. 여기 ListView의 단순화 된 버전의 항목 레이아웃의 ImageView최대 너비를 확장하는 ListView의 ImageView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:padding="4dp" > 

     <FrameLayout 
      android:id="@+id/page_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:visibility="visible" > 

      <ImageView 
       android:id="@+id/image" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:adjustViewBounds="true" 
       android:scaleType="fitCenter" 
       android:src="@drawable/some_image" /> 
     </FrameLayout> 
    </FrameLayout> 

</LinearLayout> 

의 폭이 match_parent이다가, 그리고 그것의 모든 조상은 동일합니다. 레이아웃 디자이너는 ImageView의 크기가 전체 너비에 걸쳐 있지만 내부의 이미지는 그렇지 않다는 것을 보여줍니다.

편집 : 이미지의 크기가 올바르게 조정됩니다. 문제는 목록 뷰 행의 너비가 너비가 올바른 크기로 조정될 수 없기 때문입니다. fitXY을 사용하면 너비가 조정되지만 가로 세로 비율이 올바르지 않습니다.

어떤 아이디어가 있습니까? 덕분에 .

답변

4

.... 요컨대, 커스텀 뷰는 그 자체의 치수를 그 뒤에있는 드로어 블의 실제 (스케일링되지 않은) 치수로 설정합니다.

public class ResizableImageView extends ImageView { 

    public static interface OnSizeChangedListener { 

     void onSizeChanged(int width, int height); 
    } 

    private OnSizeChangedListener onSizeChangedListener = null; 

    public ResizableImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int width = MeasureSpec.getSize(widthMeasureSpec); 
     int height = width * getDrawable().getIntrinsicHeight()/getDrawable().getIntrinsicWidth(); 
     setMeasuredDimension(width, height); 
     if (onSizeChangedListener != null) { 
      onSizeChangedListener.onSizeChanged(width, height); 
     } 
    } 

    public void setOnSizeChangedListener(OnSizeChangedListener listener) { 
     this.onSizeChangedListener = listener; 
    } 
} 

내 경우에는 다른보기, 따라서 수신기 인터페이스의 크기를 조정하기 위해 크기를 조정해야합니다.

0

Android API Guide에 따라 가로 세로 비율을 유지하는 것이 좋으면 android : scaleType = "centerInside"또는 android : scaleType = "centerCrop"에 대해 android : scaleType = "fitCenter"를 변경해야한다고 생각합니다. "fitCenter는 이미지의 종횡비를 유지하지 않으므로 나는 사용자 정의보기를 작성하지 않고이 작업을 수행 할 수있는 방법을 찾을 수 없습니다

내 자신의 질문에 대답

+0

나는 모든 다양한 유형을 시도했습니다. –

+0

어댑터 뷰 요소는 내부에 뭔가를 넣을 때까지 아무런 크기가 없다는 문제가 있습니다. 그래서 닭고기와 계란입니다. listview 크기는 자식에 맞게 셀이지만 자식 이미지 뷰는 컨테이너의 크기에 맞게 크기를 조정하려고합니다. –

관련 문제