我试图用彩色背景做一个简单的图像视图,按下时改变颜色,如果它在图像区域之外,则在触摸结束时它将恢复原始颜色或者启动另一个颜色活动(如按钮);所以我决定使用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选择器)
感谢您的帮助!
答案 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>