首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用android-Instrumentation进行拖动?

如何使用android-Instrumentation进行拖动?
EN

Stack Overflow用户
提问于 2020-07-25 23:37:43
回答 1查看 81关注 0票数 0

这是我的function.It可以工作但不能设定速度。我不知道这是否是正确的使用方式。

那么,实现拖拽的正确方式是什么呢?

代码语言:javascript
复制
public static void drag(final int start_x, final int start_y, final int end_x, final int end_y) {
    mInst = new Instrumentation();
    
    //key down
    mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, start_x, start_y, 0));
    //move
    mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_MOVE, start_x, start_y, 0));
    mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_MOVE, end_x, end_y, 0));
    //key up
    mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, end_x, end_y, 0));

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 15:22:21

代码语言:javascript
复制
public static void drag(float x1, float y1, float x2, float y2, float duration) {
        final int interval = 25;
        int steps = (int) (duration * 1000 / interval + 1);
        float dx = (x2 - x1) / steps;
        float dy = (y2 - y1) / steps;
        down(x1, y1);
        for (int step = 0; step < steps; step++) {
            SystemClock.sleep(interval);
            moveTo(x1 + step * dx, y1 + step * dy, 0);
        }
        SystemClock.sleep(interval);
        up(x2, y2);
    }


    private static void down(float x, float y) {
        if (Robot.mInst == null) {
            mInst = new Instrumentation();
        }
        mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, x, y, 0));
    }


    private static void up(float x, float y) {
        if (Robot.mInst == null) {
            mInst = new Instrumentation();
        }
        mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0));
    }


    private static void moveTo(float x, float y, int contactId) {
        if (Robot.mInst == null) {
            mInst = new Instrumentation();
        }
        mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_MOVE, x, y, 0));
    }

它起作用了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63090234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档