Обработка кликабельных областей в режиме просмотра изображений - PullRequest
5 голосов
/ 06 февраля 2012

У меня есть какое-то изображение, подобное этому

enter image description here

, и я хочу сделать красные области кликабельными.Я хочу сделать эти области кликабельными, то есть когда пользователь касается экрана красным цветом, я хочу получать уведомление и хочу зарегистрировать слушателя.

Проблема в том, что изображение на разных экранах разного размера,некоторые экраны имеют размер 240x320, некоторые 400x800 для просмотра изображений. Я использую fill_parent, чтобы изображение заполняло весь экран на каждом экране.и эта интерактивная область иногда будет 50dip от левой границы, иногда будет 150dip.Иногда это 10dip сверху, иногда 500dip ... все зависит от размера экрана

как справиться с таким сценарием?

Ответы [ 3 ]

2 голосов
/ 29 января 2014

Я нашел очень хороший учебник на этом сайте здесь: http://blahti.wordpress.com/2012/06/26/images-with-clickable-areas/

То, как вы это делаете: - У вас есть 2 изображения.- 1 - это фон, а другой - поверх него и является невидимой маской.- Маска получает OnTouchListener.- Маска имеет разные цветные области (ваши области касания).- Если вы дотронетесь до изображения, маска проверит цвет и выполнит действие.

Хорошая вещь: если вы масштабируете изображение, сенсорные области также масштабируются, так что ваши сенсорные области всегда будут включеныправильная позиция.

Это довольно прямо вперед.Надеюсь, я смогу помочь, даже если ваш вопрос старше года.

2 голосов
/ 06 февраля 2012

Лучший способ - разрезать изображение на отдельные части и поместить их в RelativeLayout.

Затем установите прослушиватель щелчка для тех изображений, где вам нужно.

Другой способ справиться с этим - определить размер экрана и рассчитать области касания:

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

final int width = display.getWidth();
final int height = display.getHeight();
0 голосов
/ 07 февраля 2012

Вот еще один пример (последний).Вы просто надеваете поверх своего изображения прозрачные кнопки и обрабатываете клики.

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