Android的触控事件无效

时间:2018-02-13 17:36:56

标签: android

我试图用彩色背景做一个简单的图像视图,按下时改变颜色,如果它在图像区域之外,则在触摸结束时它将恢复原始颜色或者启动另一个颜色活动(如按钮);所以我决定使用kotlin lambda在我的活动中实现onTouchListener。 这是代码:

imageview.setOnTouchListener{ view: View, event: MotionEvent ->
        val rect = Rect(view.left, view.top, view.right, view.bottom)
        when(event.action){
            MotionEvent.ACTION_DOWN->{
                view.setBackgroundColor(dark_color)
            }
            MotionEvent.ACTION_UP-> {
                if (rect.contains(event.x.toInt(), event.y.toInt())) 
                    startActivity(Intent(this, NewActivity::class.java)
                else{
                    view.setBackgroundColor(normal_color)
                }
            }
        }
        true
    }

它工作正常,但是当我测试它时,我看到如果触摸超出图像区域,新活动就开始了,所以我使用Log功能报告触摸的坐标,我注意到cordinates(当触发MotionEvent.ACTION_UP时)与我在屏幕上触摸的点不同。 系统是否可能被窃听? (p.s.我也试过仿真器,我得到了相同的结果,我不能使用xml选择器)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您唯一需要做的就是创建一个选择器。您将选择器设置为ImageView的背景。因此选择器会自动管理颜色(当图像被按下时)。然后在ImageView上设置一个侦听器来管理click事件。如果用户将手指移出ImageView区域,则不会触发侦听器(它会自动管理)。

在您的Java代码中

imageView.setOnClickListener(new View.OnClickListener {
   public void onClick(...){
       // Start the Activity
   }
});
XML中的

<ImageView
   android:background="@drawable/my_selector"
//...

my_selector.xml (必须位于可绘制文件夹中)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/default_pressed" android:state_pressed="true" />
    <item android:color="@color/default_not_pressed" />
</selector>