单击特定位置上的ImageView

时间:2015-05-29 07:35:24

标签: android

我有一个imageView,当我需要让用户只点击特定位置(空白区域)时,如下图所示,是否有任何建议?

enter image description here

这是我的 xml

    <RelativeLayout
            android:id="@+id/lockRelativeLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginStart="5dp"
            >
            <ImageView
                android:id="@+id/imageView"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:background="@drawable/image" />
        </RelativeLayout>

这是代码

    private View.OnTouchListener imageViewOnClickListener = new View.OnTouchListener() {

        @Override
        public boolean onTouch(View view, MotionEvent event) {
            int x = (int)event.getX();
            int y = (int)event.getY();
            if (event.getAction() == MotionEvent.ACTION_DOWN){
               //here i want if he clicked on specific location to go to another activity
 Intent intent = new Intent(context, ViewerActivity.class);
            context.startActivity(intent);
            }
            return true;
        }
    };

我不知道我是否应该使用onClick或onTouchClick !!

4 个答案:

答案 0 :(得分:4)

您可以实现OnTouchListener。

  anImageView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN){
                //Check between +- 10px jsu tto have some are to hit 
                int centerX = (v.getWidth() /2);
                if(event.getX() > centerX - 10) 
                     && event.getX() < centerX + 10)){
                    //Do your magic
                }
            }
            return true;
        }
    });

事件包含事件的坐标。 然后,您可以将其与您设置的边界进行比较,或者从图像中获取正确的像素,并检查它是否为白色。

答案 1 :(得分:3)

我建议在ImageView顶部的相对布局中添加另一个透明控件,并使用您需要的填充,并订阅其onClick事件。这样您就可以确保只点击了适当的区域。

答案 2 :(得分:2)

我所做的是我使用了两张图片一张用于显示你的图像而一张只显示了你要点击的部分

请注意我的Secound图像是我的透明图像。因此,使用one1作为透明图像。并使用其Click事件。

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

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/ic_launcher" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@xml/shape"
    android:gravity="center" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/one1" />
</LinearLayout>

现在创建xml并创建shape.xml文件,该文件将提供给Linearlayout

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

<corners android:radius="20dip" />

<stroke
    android:width="100dip"
    android:color="#A0ffffff" />

答案 3 :(得分:1)

我自己找到了一个解决方案:感谢大家回复:

private View.OnTouchListener imageViewOnClickListener = new View.OnTouchListener() {

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        int x = (int) event.getX();

        if (173 <= x && x <= 671) {
            Intent intent = new Intent(context, NextActivity.class);
            context.startActivity(intent);
        }
        return true;
    }
};