我目前正在尝试使用onclick侦听器和触控侦听器。
我发现使用onclick应用程序将始终执行操作,即使用户将他/她的手指拖离元素。但我希望用户能够改变主意并将他/她的手指拖离元素,以便它不会执行该操作。我设法通过触摸来做到这一点。
触摸代码:
action_bar_group_info.setOnTouchListener(new View.OnTouchListener() {
int [] location = new int[4];
@Override
public boolean onTouch(View v, MotionEvent event) {
location[0] = action_bar_group_info.getLeft();
location[1] = action_bar_group_info.getTop();
location[2] = action_bar_group_info.getBottom();
location[3] = action_bar_group_info.getRight();
Log.v("Location: ", "top: "+String.valueOf(location[1]) + " left: "+String.valueOf(location[0]) + " right: "+String.valueOf(location[3]) + " bottom: "+String.valueOf(location[2]));
if (event.getAction() == MotionEvent.ACTION_DOWN) {
action_bar_group_info.setBackgroundColor(Color.parseColor("#ec9169"));
return true;
}
if (event.getAction() == MotionEvent.ACTION_UP) {
if ((int) event.getX() > location[0] && (int) event.getX() < location[3] && (int) event.getY() > location[1] && (int) event.getY() < location[2]) {
action_bar_group_info.setBackgroundColor(Color.parseColor("#ec9169"));
Intent intent = new Intent(mContext, GroupInformation.class);
intent.putExtra("gid", gid);
intent.putExtra("gname", gname);
intent.putExtra("image", img);
intent.putExtra("uid", uid);
startActivity(intent);
finish();
}else {
action_bar_group_info.setBackgroundColor(Color.parseColor("#f54c00"));
}
}
if(event.getAction() == MotionEvent.ACTION_MOVE){
Log.v("Location pointer: x:"+ String.valueOf((int) event.getX())," Y: "+ String.valueOf((int) event.getY()));
if ((int) event.getX() < location[0] || (int) event.getX() > location[3] || (int) event.getY() < location[1] || (int) event.getY() > location[2]) {
action_bar_group_info.setBackgroundColor(Color.parseColor("#f54c00"));
}
}
return false;
}
});
但是这真的是这样做的方法是不是有更简单的方法来达到我想要的目的?
action_bar_group_info是线性布局。
答案 0 :(得分:4)
我发现即使用户将他/她的手指拖离元素,使用onclick也会始终执行操作。
不,这不是真的。从按钮区域伸出手指不会触发OnClickListener