【问题标题】:Can we set distance to trigger indicator for SwipeRefreshLayout?我们可以为 SwipeRefreshLayout 设置触发指示器的距离吗?
【发布时间】:2015-09-17 10:07:45
【问题描述】:

SwipeRefreshLayout 非常敏感,以至于当我在屏幕上水平滑动时,只需稍微垂直移动,就会显示“拉动刷新”指示器。我怎样才能避免这种情况? SwipeRefreshLayout 有一个功能

public void setDistanceToTriggerSync (int distance)

可以有类似的东西

public void setDistanceToTriggerIndicator (int distance)

仅在向下移动一定量的垂直距离后才显示指示器,或者你们有什么解决办法吗?

谢谢!

【问题讨论】:

标签: android swiperefreshlayout


【解决方案1】:

嘿@Viky,我在滑动刷新布局中的 View pager 遇到了同样的问题,我发现这个解决方案非常完美,希望对您有所帮助。

以下代码取自this SO answer

public class MySwipeRefreshLayout extends SwipeRefreshLayout {

    private int mTouchSlop;
    private float mPrevX;
    // Indicate if we've already declined the move event
    private boolean mDeclined;

    public MySwipeRefreshLayout(Context context, AttributeSet attrs) {
        super(context, attrs);

        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mPrevX = MotionEvent.obtain(event).getX();
                mDeclined = false; // New action
                break;

            case MotionEvent.ACTION_MOVE:
                final float eventX = event.getX();
                float xDiff = Math.abs(eventX - mPrevX);

                if (mDeclined || xDiff > mTouchSlop) {
                    mDeclined = true; // Memorize
                    return false;
                }
        }

        return super.onInterceptTouchEvent(event);
    }

}

【讨论】:

  • 如果您发现问题相同,请将问题标记为重复。
  • @Sufian 这个问题的标题比旧的 SO 问题更有意义(这就是我发现它的方式/原因)。只是想知道将这个问题标记为重复问题是否会影响它的可发现性?
  • @ban-geoengineering AFAIK 将其标记为重复将添加指向另一个(较旧)问题的链接。因此,人们不会阅读 cmets 等,而是会在页面顶部看到它(这是一个 dup)。
猜你喜欢
  • 2014-09-16
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2019-08-18
  • 1970-01-01
  • 2013-11-20
  • 2012-03-08
相关资源
最近更新 更多