Android OnClick/OnTouch用户改变主意

Android OnClick/OnTouch用户改变主意,android,onclick,ontouch,Android,Onclick,Ontouch,我目前正在试验onclick监听器和on-on-touch监听器 我发现使用onclick时,即使用户将手指从元素上拖下来,应用程序也会始终执行该操作。但是我希望用户能够改变主意,将他/她的手指从元素上拖下来,这样它就不会执行操作。我设法做到这一点与接触 触控编码: action_bar_group_info.setOnTouchListener(new View.OnTouchListener() { int [] location = new int[4];

我目前正在试验onclick监听器和on-on-touch监听器

我发现使用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\u bar\u group\u info.setOnTouchListener(新视图.OnTouchListener()){
int[]位置=新int[4];
@凌驾
公共布尔onTouch(视图v,运动事件){
位置[0]=操作栏组信息。getLeft();
位置[1]=操作\栏\组\信息.getTop();
位置[2]=操作栏组信息.getBottom();
位置[3]=操作栏组信息。getRight();
Log.v(“位置:”,“顶部:”+String.valueOf(位置[1])+“左侧:”+String.valueOf(位置[0])+“右侧:”+String.valueOf(位置[3])+“底部:”+String.valueOf(位置[2]);
if(event.getAction()==MotionEvent.ACTION\u向下){
action_bar_group_info.setBackgroundColor(Color.parseColor(“#ec9169”);
返回true;
}
if(event.getAction()==MotionEvent.ACTION\u UP){
如果((int)event.getX()>location[0]&&(int)event.getX()location[1]&(int)event.getY()location[3]| |(int)event.getY()location[2]){
操作栏组信息setBackgroundColor(Color.parseColor(“#f54c00”);
}
}
返回false;
}
});
但这真的是一种方法吗?难道没有更简单的方法来实现我想要的吗

操作栏组信息是一个线性布局

我发现使用onclick时,即使用户将手指从元素上拖下来,应用程序也会始终执行该操作

不,这不是真的。将手指从按钮区域拖出时,按钮区域不会再次启动

我发现使用onclick时,即使用户将手指从元素上拖下来,应用程序也会始终执行该操作


不,这不是真的。将手指从按钮区域拖出不会触发OnClickListener

我最初以为会,但对我来说,它确实会触发OnClickListener,我对它进行了多次测试。可能是因为它不是一个按钮,而是一个线性布局。然后你做了错误的测试,因为这基本上就是它的实现方式。OnClick在操作启动时启动,而您必须在同一个小部件上。操作启动时,我将再次尝试以确保。我再次尝试,但现在当我离开按钮时,它不会启动。我不知道为什么它以前似乎这么做很奇怪。也许我没有喝足够的咖啡;)起初我以为它会启动OnClickListener,但对我来说,它确实启动了OnClickListener,我对它进行了多次测试。可能是因为它不是一个按钮,而是一个线性布局。然后你做了错误的测试,因为这基本上就是它的实现方式。OnClick在操作启动时启动,而您必须在同一个小部件上。操作启动时,我将再次尝试以确保。我再次尝试,但现在当我离开按钮时,它不会启动。我不知道为什么它以前似乎这么做很奇怪。也许我没有喝足够的咖啡;)