处理imageview中的可点击区域

时间:2012-02-06 15:50:40

标签: android android-imageview screen-size

我有一些像这样的图像

enter image description here

我想让红色区域可点击区域。 我想让这个区域可点击,这意味着当用户触摸屏幕时,我想要通知a.i我想要注册一个听众。

问题在于图像对于不同的屏幕大小不同,有些屏幕的大小为240x320,对于图像视图我使用fill_parent大约400x800,因此图像将在每个屏幕中填满整个屏幕。而这个可点击的区域有时会从左边框开始50dip,有时会是150dip。有时它是从顶部10dip有时它是500dip ...一切都取决于屏幕尺寸

如何处理这种情况?

3 个答案:

答案 0 :(得分:2)

最好的方法是将图像剪切成单独的部分,然后将它们放在RelativeLayout中。

然后为您需要的图像设置点击监听器。

您可以处理此问题的另一种方法是确定屏幕尺寸并计算触控区域:

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

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

答案 1 :(得分:2)

我在这里找到了一个非常好的教程:http://blahti.wordpress.com/2012/06/26/images-with-clickable-areas/

你这样做的方式: - 你有2张图片。 - 1是背景,另一个是它的顶部,是一个看不见的面具。 - 掩码获取OnTouchListener。 - 面具有不同的颜色区域(触摸区域)。 - 如果触摸图像,掩码将检查颜色并执行操作。

好处是:如果缩放图像,触摸区域也会缩放,因此您的触摸区域始终位于正确的位置。

非常直截了当。希望我能提供帮助,即使你的问题超过一年。

答案 2 :(得分:0)

这是另一个例子(最后一个)。您只需将图像放在透明按钮上并处理单击。

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