我尝试将imageview设为可点击。 实际上它是可点击的,所以我可以在用户触摸imageview后调用Intent。 但我很想改变触摸时的图像。
我想要以下内容:
其中一些内容正在使用以下代码:
final ImageView v = (ImageView) findViewById(R.id.profileImage);
v.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.setImageResource(R.drawable.ic_contact_picture_down);
break;
}
case MotionEvent.ACTION_CANCEL:{
v.setImageResource(R.drawable.ic_contact_picture);
break;
}
case MotionEvent.ACTION_UP: {
takePhoto();
v.setImageResource(R.drawable.ic_contact_picture);
break;
}
}
return true;
}
});
图像在触摸时正确地改变为image2。所以ACTION_DOWN正在运行。 如果用户触摸imageview,则调用ACTION_UP。但如果在图像视图之外完成了触摸,也会调用它。如果发生这种情况,我想切换回image1,但不要调用takePhoto()函数。 从未调用过ACTION_CANCEL,我认为它是上述情况的候选者。
答案 0 :(得分:0)
您可以尝试使用Rect
来保留ImageView
的边界,然后使用ACTION_MOVE
例如,声明一个Rect
对象,
private Rect rect;
然后在setOnTouchListener()
中,初始化Rect
并使用ACTION_MOVE
进行检查,
v.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN: {
// Declare the bounds of the rect
rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
v.setImageResource(R.drawable.ic_contact_picture_down);
break;
}
case MotionEvent.ACTION_MOVE:{
if(!rect.contains((int)arg1.getX(), (int)arg1.getY())) {
// Outside the bounds
v.setImageResource(R.drawable.ic_contact_picture);
}
break;
}
case MotionEvent.ACTION_UP: {
takePhoto();
v.setImageResource(R.drawable.ic_contact_picture);
break;
}
}
return true;
}
});
对不起,我没有对此进行测试,但我认为你可以得到这个想法:)