Android开发笔记之 图片拖动

    xiaoxiao2021-04-19  165

    链接: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没执行的状态。  
    转载请注明原文地址: https://ju.6miu.com/read-676212.html

    最新回复(0)