2012-02-06 29 views
5

Tôi có một số hình ảnh như thế nàyXử lý khu vực có thể click vào ImageView

enter image description here

và tôi muốn làm cho khu vực màu đỏ khu vực có thể click. Tôi muốn làm cho khu vực này có thể nhấp được ý nghĩa khi người dùng chạm vào màn hình ở một số hốc đỏ tôi muốn được thông báo a.i Tôi muốn đăng ký người nghe.

Vấn đề là hình ảnh có kích thước khác nhau cho màn hình khác nhau, một số màn hình có kích thước 240x320 khoảng 400x800 cho chế độ xem hình ảnh tôi sử dụng fill_parent để hình ảnh sẽ lấp đầy toàn màn hình trong mọi màn hình. và các khu vực có thể nhấp đôi khi sẽ là 50dip từ đường viền bên trái đôi khi sẽ là 150dip. Đôi khi nó là 10dip từ đầu đôi khi nó là 500dip ... tất cả mọi thứ phụ thuộc vào kích thước màn hình

cách xử lý loại kịch bản này?

+0

Bản sao có thể có của [khu vực có thể nhấp của hình ảnh] (http://stackoverflow.com/questions/16670774/clickable-area-of-image) – lukle

Trả lời

2

Cách tốt nhất là cắt hình ảnh của bạn thành từng phần riêng biệt và đặt chúng vào trong RelativeLayout.

Sau đó, đặt trình nghe nhấp chuột cho những hình ảnh bạn cần.

Một cách khác để bạn có thể xử lý này là xác định kích thước màn hình và tính toán các lĩnh vực liên lạc:

final Display display = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 

final int width = display.getWidth(); 
final int height = display.getHeight(); 
+1

có tùy chọn nào khác không? gây ra điều này không hoàn toàn là một giải pháp cho trường hợp của tôi: ( – Lukap

+0

Làm thế nào để bạn chạm tay? –

+0

Tôi đã không làm điều này máy bay phản lực.Nhưng tôi muốn làm theo một số thiết kế patter cho điều này, tôi muốn đăng ký 3 người nghe (let a, b, c) và mỗi khi ai đó bấm vào góc trên cùng bên phải, tôi muốn chắc chắn rằng người nghe được gọi cho MỌI màn hình không có mater kích thước màn hình của thiết bị.Tôi hy vọng bạn nhận được quan điểm của tôi tôi không muốn thực hiện các tính toán khác nhau cho các kích thước màn hình khác nhau ... (Tôi hy vọng bạn có được điểm của tôi) – Lukap

0

Dưới đây là một ví dụ (cuối cùng). Bạn chỉ cần đặt trên đầu trang của các nút hình ảnh trong suốt của bạn và xử lý nhấp chuột.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:src="@android:drawable/edit_text" /> 

    <Button 
     android:id="@+id/bottomLeft" 
     android:layout_width="100dip" 
     android:layout_height="100dip" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:background="@android:color/transparent" /> 

    <Button 
     android:id="@+id/center" 
     android:layout_width="100dip" 
     android:layout_height="100dip" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:background="@android:color/transparent" /> 

    <Button 
     android:id="@+id/bottomRight" 
     android:layout_width="100dip" 
     android:layout_height="100dip" 
     android:layout_centerInParent="true" 
     android:background="@android:color/transparent" /> 

</RelativeLayout> 
+0

bạn đưa ra một giá trị mã hóa cứng như 100dip và đó chính xác là điều tôi không muốn để làm, bởi vì 100dip trên ldpi nhỏ, nó sẽ hoàn toàn khác với 100dip lớn-hdpi.Tôi đoán rằng tôi không đúng cách để tìm ra giải pháp cho vấn đề của tôi, tôi sẽ phải tìm kiếm cách làm việc này, nếu tôi không tìm được cách nào thì tôi sẽ phải làm như bạn giải thích nhưng điều đó có nghĩa là tôi sẽ cần cung cấp khoảng 10 bố cục khác nhau với các kết hợp kích thước màn hình (nhỏ, trung bình, lớn) và mật độ (ldpi, mdpi, hdpi) – Lukap

2

Tôi tìm thấy một hướng dẫn rất tốt trên trang web này ở đây: http://blahti.wordpress.com/2012/06/26/images-with-clickable-areas/

Cách bạn làm điều đó: - Bạn có 2 hình ảnh. - 1 là nền và mặt còn lại nằm trên nó và là mặt nạ vô hình. - Mặt nạ nhận được một OnTouchListener. - Mặt nạ có các vùng màu khác nhau (vùng cảm ứng của bạn). - Nếu bạn chạm vào hình ảnh, mặt nạ sẽ kiểm tra màu và thực hiện hành động.

Điều tuyệt vời là: Nếu bạn mở rộng hình ảnh, các khu vực cảm ứng cũng mở rộng, vì vậy bạn sẽ luôn có các vùng cảm ứng ở đúng vị trí.

Nó là khá thẳng về phía trước. Hy vọng tôi có thể giúp, ngay cả khi câu hỏi của bạn lớn hơn một năm.

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