您的位置:首页 > 移动开发 > Android开发

文章标题

2015-08-11 12:29 453 查看
最近碰到一个问题 :

实现一个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;//不向上出发了
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息