android下鼠标拖动图片的setOnTouchListener触发问题

大雀儿飞飞 2012-07-13 10:38:09
最近在做一个图片用鼠标拖动的小程序,用一个ImageView作为拖动对象,然后给这个对象添加setOnTouchListener监听,代码如下(iv_dragPicture为拖动对象):

iv_dragPicture.setOnTouchListener(new OnTouchListener() {

int lastX,lastY;
/**
* @param v
* @param event
* @return
*/
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub

int action=event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
lastX=(int) event.getRawX();
lastY=(int) event.getRawY();
//逐一判断类型
// for(int i=0;i<event.getPointerCount();i++){
// if(MotionEvent.TOOL_TYPE_MOUSE==event.getToolType(i)){
//
// }
// }
break;
case MotionEvent.ACTION_MOVE:
//移动中动态设置位置
int dx =(int)event.getRawX() - lastX;
int dy =(int)event.getRawY() - lastY;
int left = v.getLeft() + dx;
int top = v.getTop() + dy;
int right = v.getRight() + dx;
int bottom = v.getBottom() + dy;
if(left < 0){
left = 0;
right = left + v.getWidth();
}
if(right > screenWidth){
right = screenWidth;
left = right - v.getWidth();
}
if(top < 0){
top = 0;
bottom = top + v.getHeight();
}
if(bottom > screenHeight){
bottom = screenHeight;
top = bottom - v.getHeight();
}
v.layout(left, top, right, bottom);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();

break;
default:
break;
}




return false;
}
});

我是准备在ACTION_MOVE分支当中重绘这个ImageView对象的坐标,但是这样在鼠标拖动的时候却始终不能进入ACTION_MOVE分支,但是奇怪的是,在我给iv_dragPicture设置setOnLongClickListener后,鼠标却可以拖动ImageView了,调试发现程序能够进入ACTION_MOVE分支执行,很纳闷,我的setOnLongClickListener什么都没有添加,代码如下:

iv_dragPicture.setOnLongClickListener(new OnLongClickListener() {

public boolean onLongClick(View v) {
// TODO Auto-generated method stub
// Log.v("longClick","trigger");
return false;
}
});

哪位大神给解释一下这几个事件之间的关系,小弟在此谢过。同时,不知道各位平时都用什么方法来实现鼠标拖动图片的效果?我觉得我这个方法太不靠谱了。
...全文
620 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
大雀儿飞飞 2013-03-01
  • 打赏
  • 举报
回复
引用 1 楼 A3DCA 的回复:
我也不懂- -我也是这个问题,纠结
这个问题我已经搞清楚了,主要是需要仔细研究事件在android组件中的传递,我这个问题确实是onTouch函数的返回值问题造成的,我每次都返回false,表示事件没有被处理,导致一直反复触发ACTION_DOWN,但是在android中,需要先触发ACTION_DOWN并且在ACTION_DOWN被处理了过后(返回true)ACTION_MOVE才有可能被触发,因此我的图片会出现拖不动的现象。
A3DCA 2013-02-21
  • 打赏
  • 举报
回复
return false; 刚随便改了一个参数,把false改成true,你试试
A3DCA 2013-02-21
  • 打赏
  • 举报
回复
我也不懂- -我也是这个问题,纠结

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧