2010-05-04 37 views
16

Tôi có một số ImageView với chiều cao tối đa và chiều rộng tối đa được đặt là 100. Con số này thấp hơn rõ ràng không phải là một hình vuông, nhưng bạn có thể sử dụng trí tưởng tượng của bạn;)Định vị hình ảnh bên trong ImageView với chiều cao tối đa và chiều rộng tối đa được đặt

Hình 1:

╔══════════════════════════════════════════════╗ 
║ ImageView ╔══════════════╗    ║ 
║    ║    ║    ║ 
║    ║ Actual image ║    ║ 
║    ║    ║    ║ 
║    ║    ║    ║ 
║    ║    ║    ║ 
║    ╚══════════════╝    ║ 
╚══════════════════════════════════════════════╝ 

Dù sao, Nếu tôi cố gắng thiết lập một BitMap đến ImageView mà không có một tỷ lệ 1: 1, hình ảnh được định vị như hình trong Hình 1. Những gì tôi muốn là hình ảnh được đặt ở bên trái bên trong ImageView như được mô tả trong Hình 2 bên dưới.

Hình 2:

╔══════════════════════════════════════════════╗ 
║══════════════╗        ║ 
║    ║        ║ 
║ Actual image ║        ║ 
║    ║        ║ 
║    ║        ║ 
║    ║        ║ 
║══════════════╝        ║ 
╚══════════════════════════════════════════════╝ 

Bạn có thể thấy ImageView tôi trong XML dưới đây. maxHeight, maxWidthadjustViewBounds được đặt trong thời gian chạy.

<ImageView android:id="@+id/someImage" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/textName" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:paddingRight="4dp" 
    /> 

Đây là số RelativeLayout nếu có sự khác biệt.

+8

+1 cho ascii tốt nghệ thuật :-) –

Trả lời

1

Hãy thử

android:gravity="left" 

Trọng lực là như thế nào một cái nhìn vị trí nội dung của nó. Hoạt động trên TextView cho văn bản và có lẽ ImageView cho hình ảnh.

Chỉnh sửa:

Thử tạo FrameLayout chứa ImageView. Đặt chiều rộng và chiều cao của ImageView thành "wrap_content" và đặt trọng số của phần tử gốc thành "left".

Nếu không, hãy thực hiện onDraw trong Chế độ xem và vẽ hình ảnh ở bất kỳ vị trí nào bạn muốn.

1

tôi sử dụng:

android:scaleType="fitCenter" 

ghi here. Chúc may mắn!

EDIT: Tôi không nhận ra bạn đang căn giữa hình ảnh trong ImageView (lần đọc đầu tiên tôi nghĩ bạn gặp sự cố khi căn giữa ImageView trong Chế độ xem khác). Bây giờ tôi không như vậy chắc chắn, nhưng bạn có thể nhìn vào ScaleType anyways^_-

2

tôi phải đối mặt với cùng một vấn đề và đây là cách tôi giải quyết nó:

tôi đã kết thúc đặt ImageView bên trong một RelativeLayout đó là chỉ lớn như ImageView và đặt trọng lực của Bố cục tương đối thành thứ tôi muốn (còn lại trong trường hợp của bạn).

Tôi cũng đặt adjustViewBounds thành true để ImageView chỉ lớn như Hình ảnh và được đặt trong Bố cục tương đối.

Không phải là giải pháp rất thanh lịch nhưng nó hoạt động ...

3

Tại sao bạn không chỉ thêm drawableLeft vào Chế độ xem của mình.

Như thế này (trong bố cục của bạn.xml): android: drawableLeft = "@ drawable/yourDrawableId" -hoặc- như thế này (trong mã Java): yourView.setCompoundDrawablesWithIntrinsicBounds (yourDrawableId, 0, 0,0);

Bạn có thể kiểm soát phần đệm, v.v. của hình vẽ này bên trong vùng chứa Chế độ xem của bạn (để kiểm soát các chỉnh sửa bố cục gần giống).

+0

Và chính xác nó hoạt động ở đâu? Tự động hoàn thành không hiển thị cho tôi "drawableLeft". Bạn có thể cung cấp một ví dụ không? –

19

thử này

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/home_icon" 
    android:scaleType="fitStart"/> 

Nó chỉ giúp cho tôi.

1

Có điều gì đó không đúng. ImageView của bạn được xác định bằng wrap_content cho cả hai số layout_widthlayout_height trong XML, vì vậy, nó luôn luôn chỉ chiếm cùng một không gian như bitmap của bạn.

Hãy thử thêm một android:background cho ImageView của bạn để thấy rằng nó thực sự là rộng hơn so với bitmap của bạn và gây ra các định tâm không mong muốn:

<ImageView android:id="@+id/someImage" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/textName" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:paddingRight="4dp" 
    android:background="#F00" 
    /> 

thử nghiệm nó với một số bitmap có màu nền trong suốt vì vậy chúng tôi có thể nhìn thấy màu đỏ nền từ ImageView. Tôi hy vọng nó sẽ hiển thị hình chữ nhật cao nếu bitmap nguồn của bạn cao và hình chữ nhật rộng nếu bitmap rộng. Bạn sẽ chỉ thấy một hình vuông nếu bitmap nguồn của bạn là hình vuông. Chúng ta sẽ không bao giờ thấy trường hợp Hình 1 từ câu hỏi của bạn.

Có thể bạn muốn ImageView của mình luôn có kích thước 100x100 mọi lúc thay thế? Sau đó, bạn có thể sử dụng đoạn mã sau (chú ý fitStart cho scaleType thuộc tính như đã đề cập một cách chính xác bởi những người khác đã được):

<ImageView android:id="@+id/someImage" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/textName" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:paddingRight="4dp" 
    android:background="#F00" 
    android:scaleType="fitStart" 
    /> 

Không cần thiết maxHeight, maxWidthadjustViewBounds từ mã Java nếu điều này là những gì bạn muốn.

4

Theo mặc định, scaleType là "fitCenter"/ScaleType.FIT_CENTER như trong bản phác thảo đầu tiên của bạn.


Để align drawable đến trái của ImageView, như trong phác thảo thứ hai của bạn:

trong giao diện xml:

<ImageView 
    android:scaleType="fitStart" /> 

hoặc trong lớp Java :

ImageView image_view = [create new ImageView or getView from xml]; 
image_view.setScale(ScaleType.FIT_START); 


Để align drawable đến đúng của ImageView

trong giao diện xml:

<ImageView 
    android:scaleType="fitEnd" /> 

hoặc trong lớp Java:

ImageView image_view = [create new ImageView or getView from xml]; 
image_view.setScale(ScaleType.FIT_END); 
+0

Chính xác là câu trả lời hay để căn giữa hình ảnh bên trong một ImageView, cần phải bỏ phiếu nhiều hơn! – Pull

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