我试着使一个图像视图可点击。实际上,它是可点击的,这样我就可以在用户触摸图像视图后调用一个意图。但我正在努力改变触觉上的形象。
我想要以下几点:
这些东西中有些是使用以下代码的:
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正在工作。如果用户取消对图像视图的访问,则调用ACTION_UP。但是,如果非触摸操作是在图像视图之外完成的,则也会调用它。如果发生这种情况,我希望切换回image1,但不调用takePhoto()函数。从来没有调用过ACTION_CANCEL,我认为它是上述情况的候选。
发布于 2012-06-17 22:26:32
您可以尝试使用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;
}
});对不起,我还没有测试这个,但我想你可以得到这样的想法:)
https://stackoverflow.com/questions/11075095
复制相似问题