Android开发笔记之 图片拖动

链接:http://www.2cto.com/kf/201109/102541.html

主要思想代码:
通过动态设置imageView的位置。来实现同步图片位置的移动。
private View.OnTouchListener movingEventListener = new View.OnTouchListener() {
int lastX, lastY;

@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
int X = (int) event.getRawX();
int Y = (int) event.getRawY();


switch (action) {
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();

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 true;
}
}; v.layout是相对与屏幕内布局的坐标的。getX();也是相对与屏幕布局的坐标。
而getRawX()是相对整个手机屏幕的左上角的。
因此如果利用getRawX()来计算布局内的坐标是会不准确的。
关于触屏事件原理的解释:(事情往往没有想象的简单啊,不懂的话很有可能做出一些奇怪的bug)
三个之间是有一定的关系。可以看做通过次数来计算的。
第一次进入触屏事件,默认你执行了down事件(即时你根本没有执行过down事件。比如在第一次进入触屏之后直接return) 
之后一段时间内进入触屏事件会当做move来处理。(这意味着没有绝对的第一次执行down事件,可能第一次在你看来相当于直接执行了move。比如在第一次进入触屏事件之后直接return,就会出现下次直接执行move的情况。。。。),之后的一段时间内的触屏事件都当做move来处理,直到你执行了up
最后会当做up处理。up完之后会恢复到down没执行的状态。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小公子三木君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值