gpt4 book ai didi

java - 以编程方式模拟平滑的拖动事件

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:46 25 4
gpt4 key购买 nike

我使用自定义 DragLinearLayout .我使用 addDragView() 添加的所有子项都是可拖动的(用户交互)。
我想为点击的 View 模拟拖动事件(平滑移动到布局底部)。

ACTION_DOWN -> ACTION_MOVE -> ACTION_UP

我试过这段代码,但没有用。

long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
float x = view.getLeft();
float y = view.getTop();
int metaState = 0;
MotionEvent downEvent = MotionEvent.obtain(
downTime,
eventTime + 1000,
MotionEvent.ACTION_DOWN,
x,
y,
metaState
);
view.dispatchTouchEvent(downEvent);

MotionEvent moveEvent = MotionEvent.obtain(
downTime,
eventTime + 1000,
MotionEvent.ACTION_MOVE,
x,
y + 300,
metaState
);
view.dispatchTouchEvent(moveEvent);

MotionEvent upEvent = MotionEvent.obtain(
downTime,
eventTime + 1001,
MotionEvent.ACTION_UP,
x,
y + 300,
metaState
);
view.dispatchTouchEvent(upEvent);

最佳答案

我遇到了同样的问题,我必须模拟 ListView 才能过度滚动。

经过一些调整,我成功地完成了工作。

这是我所做的:(overScrollDown() 是我的自定义 ListView 中的一个函数)

您可以在此 gist 中查看详细信息.还有 screencast

public void overScrollDown() {
post(new Runnable() {
@Override
public void run() {
final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_DOWN, getWidth() / 2, getHeight() / 2, 0);
dispatchTouchEvent(event);
event.recycle();
}
});

postDelayed(new Runnable() {
@Override
public void run() {
final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_MOVE, getWidth() / 2, getHeight() / 2, 0);
dispatchTouchEvent(event);
event.recycle();
}
}, 50);

postDelayed(new Runnable() {
@Override
public void run() {
final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_MOVE, getWidth() / 2, getHeight() / 2 + 400, 0);
dispatchTouchEvent(event);
event.recycle();
}
}, 100);

postDelayed(new Runnable() {
@Override
public void run() {
final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_UP, getWidth() / 2, getHeight() / 2 + 400, 0);
dispatchTouchEvent(event);
event.recycle();
}
}, 3000);
}

顺便说一句。使用更多 ACTION_MOVE 事件可以使向下滚动操作更流畅..

关于java - 以编程方式模拟平滑的拖动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40747251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com