2011-03-18 6 views
70

LinearLayout 안에 몇 개의 ImageView가 있습니다. LinearLayout 내부에 세로로 맞추는 동시에 가로 세로 비율을 유지할 수 있도록 ImageView를 축소해야합니다. 가로로, 나는 그들이 서로에 인접 해있을 필요가있다.Android 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> 

이클립스 레이아웃 편집기에서 (이미지 수직으로 잘려서 크기가 조정되지는 않지만, 우리가 사랑하는 법을 배우는 특질 중 하나 일뿐입니다.)

하드웨어에서 실행하면 이미지의 가로 세로 비율은 유지하면서 올바른 높이로 조정됩니다. 내 문제는 그들이 서로 옆에 있지 않다는 것이다. 각 ImageView의 높이가 LinearLayout 높이와 정확하게 일치합니다. 각 ImageView의 너비는 크기 조정되지 않은 이미지의 너비입니다. 즉, 축소 된 이미지가 ImageViews의 왼쪽에 나타나는 것입니다. 이 때문에 이미지간에 큰 차이가납니다.

이상적으로 XML을 통해 관리하고 싶습니다. 가능하지 않은 경우 사용자 지정보기를 사용하는 것이 가장 좋은 방법 일 수 있음을 이해합니다.

높이에 따라 너비를 조정하여 필요한 크기의 이미지보기를 만들 수 있도록 onMeasure를 재정의하는 IconView (이미지 뷰 확장) 클래스를 만들려고했습니다. 그러나 함수에 전달 된 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의 높이를 얻으려면 어떻게해야합니까?

이 기사를 읽었다면 고마워요. 솔루션의 방향으로 나를 지적 할 수 있다면 더욱 감사드립니다!

+1

고마워, 나는 비슷한 문제가 있었다 : 내가 원했던 것은 전체 너비를 사용하여 앱 상단에있는 그림이었다. 몇 가지 알려지지 않은 이유로 imageView는 이미지 자체의 거의 두 배에 달하여 귀중한 화면 공간을 차단합니다.'android : adjustViewBounds = "true"'이미지를 높이 조절 한 덕분에 – dave

+0

@dave'android :: adjustViewBounds'는 기본적으로 true로 설정되지 않습니다. 네 문제가 지금 기쁘다. – Rok

+0

감사합니다. 내 상사 한테서 저를 구해 줬어요! –

답변

245

ImageView를 변경하여 android:layout_height="fill_parent"을 사용하면 어떨까요?

편집은 - 나에게 찾을 수있는 동안을했다,하지만 소스에서 찾고 나를 adjustViewBounds을 찾아 낼 수있었습니다. ImageViews에 android:adjustViewBounds="true"을 추가 할 수 있습니다. 놀랍게도이 기본값은 false입니다.

+6

layout_height를 fill_parent로 변경해도 아무런 차이가 없지만 adjustViewBounds를 true로 설정하면 트릭을 만들었습니다! 나는 여러 가지 견해로 너무 많은 일을 해냈고 어떻게 든 그 매개 변수를 알아 채지 못하는 것을 보았습니다. 고마워요 :) – Rok

+1

나도. 나는 그것이 사실 일 것이라고 추측했지만 어떻게 든이 문제에 부딪치지 않았다. –

+2

대단위! android : adjustViewBounds = "true"가 작동합니다! – AVEbrahimi

10

이상한 android:layout_height="fill_parent" 및 은 도움이되지 않았습니다. 내가 가진 문제는 이미지가 표시되었지만 이미지 맨 아래의 맨 위 및 검은 색 행에있는 블록 행이있는 것입니다. 축척 유형을 "centerCrop"으로 설정하면 도움이되었습니다. 내 이미지 크기가 작아지는 이유는 작았 다.

6

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

+6

이것은 내 문제를 해결 .. 사실'android : scaleType = "fitXY"' +1 : :) –

+0

@MiteshShah, 'fitXY' 나를 위해 일했다! – ehehhh

관련 문제