2010-06-08 7 views
5

600x800 크기의 AVD에서 JPG (~ 770x 1024)로 단일 ImageView에서 ScrollView를 사용하려고했습니다.ImageView를 Android의 ScrollView에 추가 할 때 중복 여백이 발생했습니다.

내 main.xml에는 다음과 같습니다

<?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" 
    > 
<ScrollView 
android:id="@+id/scroller" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
/> 
</LinearLayout> 

지금,

setContentView(R.layout.main); 
ScrollView sv = (ScrollView)findViewById(R.id.scroller); 
ImageView iv = new ImageView(this); 
iv.setImageDrawable(new BitmapDrawable("/sdcard/770x1024.jpg")); // same happens with ScaleDrawable. 
iv.setScaleType(ScaleType.CENTER_INSIDE); 
sv.addView(sv); // and it does not go any better if I use Linear Layout between the ScrollView and the ImageView. 

결과는 이미지가 배경으로 싸서있는 ScrollView의 중간에 표시 한 것입니다으로 하나의 이미지 뷰를 추가 상단 및 하단에 다음과 같은 영역을 추가합니다.

 | } blank 
    | } 
Image| 
. | 
. : 
. : 
    : } blank 
    : } 
    ^-scrollbar 

대신

Image| 
. | 
. | 
. | 
. : 

ImageView 빨간색 배경을 설정하려고 시도했는데 빈 여백이 ImageView 배경인지 확인했습니다. 나는 이미지의 크기보다 더 걸릴하지 기대

iv.setBackgroundColor(color.Red); 

는합니다 (AVD 크기로 축소)와 내가있는 ScrollView 날 나머지 (있는 경우)를 통해 스크롤 할 것으로 예상된다.

어떤 이유로 든 드로어 블 크기는 600x1024입니다.

더욱이 는 I 선형 레이아웃은 이미지 뷰와 텍스트 뷰에 부모이고있는 ScrollView가있는 LinearLayout에 부모 등의 더미 텍스트 뷰와의 LinearLayout을 추가하려고 시도.
LinearLayout dummy = new LinearLayout(this); 
dummy.addView(iv); 
TextView someTextView = new TextView(this); 
someTextView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
dummy.addView(someTextView); 
sv.addView(dummy); 

결과

매우 독특한이었다 전체 레이아웃 텍스트 적은 텍스트 뷰 (19)의 높이로 설정 하였다.

______________________ 
| T I T L E B A R | 
+--------------------+ 
|   []<-image | 
|  height=19px | 
.     . 
.     . 
+--------------------+ 

이미지를 늘리지 않는 것이 중요합니다. ScaleType에 FIT_XY를 사용할 수 없습니다. 잠재적으로 스크롤 할 수있는 페이지 표시를 구현하는 권장 방법은 무엇입니까? 일반 레이아웃으로 수동으로 수행해야하고 GestureDetector.OnScroll 이벤트를 스크롤해야합니까?

감사

쉬 무엘

P.S : 또 다른 관찰 : 600x780 (비례 스케일링)에 이미지 스케일 다운과 함께 제대로 작동 않습니다. 불행히도, 나를 위해 이미지의 축소 된 클론 세트를 사용하는 것은 불가능합니다.

답변

0

이미지가 전체 공간을 채우고 싶다면 ScaleType.CENTER_CROP를 사용하십시오. 그러나 이미지의 왼쪽 및 오른쪽 가장자리를 조금 자릅니다.

+0

는 또 죄송합니다 ... 그것은 왼쪽과 오른쪽 작물보다 조금 :( 가 실제로 폭이 FILL_PARENT처럼 행동하려는 것보다, WRAP_CONTENT와 같은 높이, 그리고 imageView.getHeight()> screen_height 인 경우 ScrollView를 스크롤 할 수 있습니다. (이미지의 경계에서만 ... 그 이상) 사실, 저는 빠르고 매우 더러운 것 : FIT_START. 이미지는 ScrollView 상단에 표시되며 언뜻보기에는 괜찮습니다. 아래로 스크롤하지 않는 한 - 그러면 큰 검은 색 영역이 보입니다. – Meymann

0

this post을 살펴보십시오.

공식적인 대답은 이것이다 : 나는 당신의 시나리오에서 작동합니다 믿고, 비슷한 일을 했어, 그러나 이것은 YMMV 그래서, 아니 테스트와 내 머리 꺼져

imgPreview.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
imgPreview.setAdjustViewBounds(true); 
1

:

ImageView iv = new ImageView(this); 
Drawable image = new BitmapDrawable("/sdcard/770x1024.jpg"); 
ScrollView scrollView = (ScrollView)findViewById(R.id.scroller); 

int xWidth = image.getIntrinsicWidth(); 
int yHeight = image.getIntrinsicHeight(); 

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(xWidth, yHeight); 
iv.setLayoutParams(params); 
iv.setImageDrawable(image); 
iv.setScaleType(ImageView.ScaleType.CENTER); 

scrollView.addView(iv); 

ScrollView가 수평 및 수직 스크롤을 동시에 허용하는지 또는 ScrollView 내에 HorizontalScrollView를 넣어야하는지, 아니면 가능할 지 여부는 알 수 없습니다. 올바른 크기의 ImageView를 얻으십시오!

16

는 XML에 이미지 뷰에이 추가 :

android:adjustViewBounds="true" 
+1

나는 같은 반응을 얻었다. .. 감사합니다!! – Diego

관련 문제