gpt4 book ai didi

Android 2 ViewPager 同时滚动

转载 作者:行者123 更新时间:2023-11-29 15:15:00 25 4
gpt4 key购买 nike

是否可以让 2 个 ViewPagers 同时滚动,如果我开始在一个上滚动,另一个执行完全相同的滚动行为。或者我应该实现 ViewPager 以外的东西。

谢谢

最佳答案

最适合我的解决方案是在 ViewPager 实例之间传递 OnTouchListener 中的 MotionEvent。尝试了假拖动,但它总是滞后和错误(也尝试了这个线程的解决方案 - 没有用) - 我需要一个平滑的、类似视差的效果。

因此,我的建议是实现一个 View.OnTouchListenerMotionEvent 必须缩放以补偿宽度差异。

public class SyncScrollOnTouchListener implements View.OnTouchListener {

private final View syncedView;

public SyncScrollOnTouchListener(@NonNull View syncedView) {
this.syncedView = syncedView;
}

@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
MotionEvent syncEvent = MotionEvent.obtain(motionEvent);
float width1 = view.getWidth();
float width2 = syncedView.getWidth();

//sync motion of two view pagers by simulating a touch event
//offset by its X position, and scaled by width ratio
syncEvent.setLocation(syncedView.getX() + motionEvent.getX() * width2 / width1,
motionEvent.getY());
syncedView.onTouchEvent(syncEvent);
return false;
}
}

然后将它设置为你的ViewPager

    sourcePager.setOnTouchListener(new SyncScrollOnTouchListener(targetPager));

请注意,此解决方案仅在两个寻呼机具有相同方向时才有效。如果您需要它适用于不同的方向 - 调整 syncEvent Y 坐标而不是 X。

我们还需要考虑一个问题 - 可能仅导致一个寻呼机换页的最小抛掷速度和距离。

通过向我们的寻呼机添加一个 OnPageChangeListener 可以很容易地解决这个问题

sourcePager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
//no-op
}

@Override
public void onPageSelected(int position) {
targetPager.setCurrentItem(position, true);
}

@Override
public void onPageScrollStateChanged(int state) {
//no-op
}
});

关于Android 2 ViewPager 同时滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25206629/

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