gpt4 book ai didi

android - 创建假的拖动事件来移动 ViewPager

转载 作者:太空宇宙 更新时间:2023-11-03 10:19:50 27 4
gpt4 key购买 nike

我有一个 ViewPager,里面有 Fragment。我想以编程方式创建一个运动事件,以“查看”ViewPager 中当前 Fragment 左侧和右侧的 Fragment(显示部分的相邻 fragment ,然后移回当前 Fragment)。它应该看起来像用户正在这样做。

我试过 ViewPager.fakeDragBy 但这会立即发生并且速度太快。我查看了 MotionEvent.obtain()View.dispatchTouchEvent,这似乎是执行此操作的方法,对吧?

我必须在哪个 View 上发送 MotionEvents?我是否必须手动分派(dispatch)几个 MotionEvent 来实现我想要的,例如ACTION_DOWN, ACTION_???, ACTION_UP?

编辑:

我尝试了以下方法:

public void drag(View view, float fromX, float toX, float fromY,
float toY, int stepCount) {

long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();

float y = fromY;
float x = fromX;

float yStep = (toY - fromY) / stepCount;
float xStep = (toX - fromX) / stepCount;

MotionEvent event = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, x, y, 0);

view.dispatchTouchEvent(event);

for (int i = 0; i < stepCount; ++i) {

y += yStep;
x += xStep;
eventTime = SystemClock.uptimeMillis();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, x, y, 0);
view.dispatchTouchEvent(event);

}

eventTime = SystemClock.uptimeMillis();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, 0);
view.dispatchTouchEvent(event);

}

这可以很好地创建拖动 Action ,问题是:它非常快。我在循环中尝试了 Thread.sleep() 并玩弄了 eventTime(在 for 循环中的每次迭代中都添加了一些时间),但无济于事:触摸事件被延迟调度,但是 ViewPager 的实际 react 仍然非常快。

最佳答案

你可以这样做:

if (!viewpager.isFakeDragging()) {
viewpager.beginFakeDrag();
}
viewpager.fakeDragBy(value);

文档: fakeDragBy(float) , beginFakeDrag() , endFakeDrag() .

并在 onAnimationEnd()

@Override
public void onAnimationEnd(Animator mAnimation) {
viewpager.endFakeDrag();
}

关于android - 创建假的拖动事件来移动 ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25642305/

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