文章标题

来源:互联网 发布:大学生单片机自学视频 编辑:程序博客网 时间:2024/05/18 01:36

最近碰到一个问题 :

  实现一个button按钮可以移动,但却出现另外一个问题 ,就是onTouch事件和onClick事件的冲突.  解决办法是:不要onClick()了  直接在onTouch的MotionEvent.ACTION_UP:中判断  位移如果小于自己设定的某个值(10),  就视为点击事件,否则 就是onTouch事件了:
setIB.setOnTouchListener(new OnTouchListener() {            int lastX,lastY;            int offsetX = 0;            int offsetY = 0;            @Override            public boolean onTouch(View v, MotionEvent event) {                int ea = event.getAction();                switch (ea) {                case MotionEvent.ACTION_DOWN://把当前位置记录下来                    lastX = (int) event.getRawX();                    lastY = (int) event.getRawY();                    offsetX = (int) event.getRawX();                    offsetY = (int) event.getRawY();                    System.out.println("触摸X:Y"+offsetX+":"+offsetY);                    break;                case MotionEvent.ACTION_MOVE:                    int dx = (int) (event.getRawX()-lastX);                    int dy = (int) (event.getRawY()-lastY);                    l = v.getLeft() + dx;                    b = v.getBottom() + dy;                    r = v.getRight() + dx;                    t = v.getTop() + dy;                    if(l<0){                        l=0;                            r=l+v.getWidth();                    }                    if(t<0){                        t=0;                        b=t+v.getHeight();                    }                    if(r>screenWidth){                        r=screenWidth;                        l=r-v.getWidth();                    }                    if(b>screenHeight){                        b=screenHeight;                        t=b-v.getHeight();                    }                    v.layout(l, t, r, b);                    lastX = (int) event.getRawX();                    lastY = (int) event.getRawY();                    v.postInvalidate();                    break;                case MotionEvent.ACTION_UP:                    System.out.println("离开之前X:Y "+offsetX+":"+offsetY);                    System.out.println("get:"+event.getRawX()+":"+event.getRawY());                    offsetX = (int) (event.getRawX()-offsetX);                    offsetY = (int) (event.getRawY()-offsetY);                    System.out.println("离开X:Y"+offsetX+":"+offsetY);                    if(Math.sqrt(Math.pow(offsetX, 2)+Math.pow(offsetY, 2)) > 10){                        System.out.println("位移:"+Math.sqrt(Math.pow(offsetX, 2)+Math.pow(offsetY, 2)));                        System.out.println("没位移");                    }else{//如果位移不够大就 当作onclick事件                        System.out.println("onclick");                                            }                    break;                }                return true;//不向上出发了            }        });
0 0
原创粉丝点击