developer tip

Android ImageView 크기가 소스 이미지로 확장되지 않음

optionbox 2020. 10. 25. 12:08
반응형

Android ImageView 크기가 소스 이미지로 확장되지 않음


LinearLayout 안에 몇 가지 ImageView가 있습니다. LinearLayout 내부에 세로로 맞추는 동안 가로 세로 비율을 유지하도록 ImageView를 축소해야합니다. 수평으로, 나는 그것들이 서로 인접하기 만하면됩니다.

가중치가있는 레이아웃을 중첩하는 단순화 된 테스트 베드를 만들어 ImageViews에 대해 넓지 만 높지는 않은 LinearLayout-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
    <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="5">
        <LinearLayout android:id="@+id/linearLayout3" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1">
            <ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
            <ImageView android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
        </LinearLayout>
        <LinearLayout android:id="@+id/linearLayout4" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"></LinearLayout>
    </LinearLayout>
    <LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>

(Eclipse 레이아웃 편집기에서 이미지는 수직으로 잘리고 전혀 크기가 조정되지 않습니다.하지만 이것은 우리가 좋아하는 특이점 중 하나 일뿐입니다)

하드웨어에서 실행할 때 이미지는 종횡비를 유지하면서 올바른 높이로 조정됩니다. 내 문제는 그들이 서로 옆에 있지 않다는 것입니다. 각 ImageView의 높이는 LinearLayout의 높이와 올바르게 일치합니다. 각 ImageView의 너비는 크기가 조정되지 않은 이미지의 너비입니다. ImageView의 왼쪽에 표시되는 실제 축소 된 이미지입니다. 이 때문에 이미지 사이에 큰 차이가 생깁니다.

이상적으로는 이것을 XML을 통해 관리하고 싶지만 이것이 가능하지 않은 경우 사용자 지정보기를 사용하는 것이 최상의 솔루션 일 수 있음을 이해합니다.

높이에 따라 너비를 조정하여 필요한 크기의 이미지보기를 만들 수 있도록 onMeasure를 재정의하는 IconView (ImageView 확장) 클래스를 만들려고했습니다. 그러나 함수에 전달되는 parentWidth 및 parentHeight는 LinearLayout 컨테이너가 아니라 화면의 크기였습니다.

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
  int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
  // Calculations followed by calls to setMeasuredDimension, setLayoutParams
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

그래서 내 질문은-

1) 필요한 작업을 수행하도록 XML을 수정할 수 있습니까?

2) 사용자 정의 이미지에 필요한 너비를 계산할 수 있도록 사용자 정의 클래스가 LinearLayout의 높이를 가져 오도록하려면 어떻게해야합니까?

여기까지 읽어 주셔서 감사합니다. 해결책의 방향을 알려 주시면 더욱 감사합니다!


사용할 ImageView를 변경하는 것은 android:layout_height="fill_parent"어떻습니까?

편집 -찾는 데 시간이 좀 걸렸지 만 소스를 보면 adjustViewBounds를 정확히 찾을 수있었습니다 . android:adjustViewBounds="true"ImageView에 추가해 볼 수 있습니다 . 놀랍게도 기본값은 false입니다.


이상하게도 android:layout_height="fill_parent"하고 android:adjustViewBounds="true"도움이되지 않았다. 내가 가진 문제는 이미지가 표시되지만 상단에 블록 행이 있고 이미지 하단에 검은 행이 있다는 것입니다. "centerCrop"에게 도움이 될 스케일 유형 설정 . 내 이미지 크기가 작기 때문이라고 생각합니다.


비슷한 문제가 있었고 해결책은 android:scaleType="fitEnd"XML 레이아웃 파일에 ImageView의 속성 을 설정하는 것이 었습니다 .

참고 URL : https://stackoverflow.com/questions/5355130/android-imageview-size-not-scaling-with-source-image

반응형