gpt4 book ai didi

android - 双向 SwipeRefreshLayout?

转载 作者:行者123 更新时间:2023-11-29 01:34:40 27 4
gpt4 key购买 nike

我喜欢新的 SwipeRefreshLayout!它看起来很棒,而且非常容易使用。但我想在两个方向上使用它。我有一个消息屏幕,我想通过从上到下滑动来加载旧消息,我想通过从下到上滑动来加载新消息。

这个例子:http://www.bignerdranch.com/blog/implementing-swipe-to-refresh/很容易地解释了如何从上到下滑动,但我如何在两个方向上实现它?

最佳答案

基于源代码https://github.com/futuresimple/android-support-v4/blob/master/src/java/android/support/v4/widget/SwipeRefreshLayout.java它只监听垂直变化(参见 public boolean onTouchEvent(MotionEvent event))。

您应该能够重写该类并自己实现此重写以使其能够监听水平和垂直滑动,但我认为没有任何开箱即用的东西可以让您这样做。

应该最感兴趣的一点是:

case MotionEvent.ACTION_MOVE: 
if (mDownEvent != null && !mReturningToStart) {
final float eventY = event.getY();
float yDiff = eventY - mDownEvent.getY();
if (yDiff > mTouchSlop) {
// User velocity passed min velocity; trigger a refresh
if (yDiff > mDistanceToTriggerSync) {
// User movement passed distance; trigger a refresh
startRefresh();
handled = true;
break;
} else {
// Just track the user's movement
setTriggerPercentage(
mAccelerateInterpolator.getInterpolation(
yDiff / mDistanceToTriggerSync));
float offsetTop = yDiff;
if (mPrevY > eventY) {
offsetTop = yDiff - mTouchSlop;
}
updateContentOffsetTop((int) (offsetTop));
if (mPrevY > eventY && (mTarget.getTop() < mTouchSlop)) {
// If the user puts the view back at the top, we
// don't need to. This shouldn't be considered
// cancelling the gesture as the user can restart from the top.
removeCallbacks(mCancel);
} else {
updatePositionTimeout();
}
mPrevY = event.getY();
handled = true;
}
}
}
break;

请注意,我不推荐这种方法。它不是标准界面,没有人会期望它以这种方式工作,这可能会造成混淆。在自定义布局中重写此方法还会带来额外的风险,即当新版本出现并且您想要升级时,您可能不得不在未来重做所有事情。

关于android - 双向 SwipeRefreshLayout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29182119/

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