2010-06-08 32 views
5

Tôi đã cố gắng sử dụng một ScrollView trên một ImageView đơn với JPG (~ 770 x 1024) trên AVD là 600x800.Lề thừa khi thêm ImageView vào ScrollView trong Android

main.xml của tôi là:

<?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> 

Bây giờ, tôi thêm một ImageView duy nhất với

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. 

Kết quả là Những hình ảnh được hiển thị trong một trung tâm của một scrollview, được bao bọc bởi nền khu vực trên cùng và dưới cùng như sau:

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

Thay vì chỉ

Image| 
. | 
. | 
. | 
. : 

Tôi đã cố gắng thiết lập nền của ImageView đỏ và xác minh rằng lề trống là nền ImageView.

iv.setBackgroundColor(color.Red); 

Nơi tôi mong chờ hình ảnh để có không quá kích thước của nó (quy mô với kích thước AVD) và tôi hy vọng các scrollview để cho tôi di chuyển trên phần còn lại (nếu có).

Vì một lý do nào đó, tôi thấy rằng kích thước có thể vẽ là 600x1024.

Hơn nữa Tôi cố gắng để thêm một LinearLayout với một cái nhìn văn bản dummy như cách bố trí tuyến tính là một phụ huynh cho ImageView và TextView, và scrollview là một phụ huynh đến 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); 

Kết quả là rất đặc biệt: Toàn bộ bố trí đã được thiết lập vào chiều cao của một cái nhìn văn bản text-ít (19).

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

Điều quan trọng là tôi tránh phải kéo giãn hình ảnh. Tôi không thể sử dụng FIT_XY cho ScaleType. Cách được khuyến nghị để triển khai hiển thị một trang có khả năng được cuộn là gì? Tôi có phải thực hiện thủ công với bố cục đơn giản và cuộn theo số GestureDetector.OnScroll sự kiện không?

Cảm ơn

Shmuel

Tái bút: quan sát khác: Với một hình ảnh thu nhỏ để 600x780 (tỉ lệ tương ứng) nó hoạt động đúng. Thật không may, đối với tôi nó không phải là khả thi để sử dụng một tập hợp các bản sao thu nhỏ của hình ảnh.

Trả lời

0

Nếu bạn muốn hình ảnh lấp đầy toàn bộ không gian, tôi sẽ sử dụng ScaleType.CENTER_CROP. Điều này sẽ cắt cạnh trái và phải của hình ảnh của bạn một chút tuy nhiên.

+0

Một oops ... Nó Cây trái và phải hơn một chút :( Tôi thực sự muốn chiều rộng để hành xử như FILL_PARENT, và chiều cao như WRAP_CONTENT, và nếu screenView.getHeight()> screen_height, sau đó tôi muốn ScrollView cuộn (nhưng chỉ trong ranh giới của hình ảnh ... không nhiều hơn thế) Thực ra, tôi đã làm điều nhanh chóng và rất bẩn: FIT_START Hình ảnh được hiển thị trên đầu trang của ScrollView và nó không sao ngay từ cái nhìn đầu tiên, miễn là bạn không thử cuộn xuống - và sau đó bạn thấy một khu vực màu đen lớn. – Meymann

0

Hãy xem this post.

câu trả lời chính thức là thế này:

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

Tôi đã phải làm một cái gì đó tương tự, mà tôi tin rằng sẽ làm việc trong kịch bản của bạn, nhưng điều này là off đầu tôi không có thử nghiệm, do đó, YMMV:

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); 

Tôi không biết có hay không ScrollView cho phép cuộn ngang và dọc cùng một lúc hoặc bạn có phải đặt HorizontalScrollView trong ScrollView hay không. NÊN sẽ giúp bạn có được ImageView có kích thước chính xác!

16

Thêm phần này vào ImageView của bạn trong xml:

android:adjustViewBounds="true" 
+1

Tôi nhận được phản ứng tương tự .. THANKS !! – Diego

Các vấn đề liên quan