ViewDragHelper无法正常工作

时间:2016-08-27 09:52:34

标签: android viewdraghelper

在FrameLayout中有一个可以拖动的子TextView,但当我尝试更改此TextView的文本或边距时,onViewReleased和onViewPositionChanged方法无法正常工作(滚动回原始位置)当它滚动时。我不确定我是否使用它或者我应该知道的东西。

部分代码:

    ViewDragHelper.Callback callback = new ViewDragHelper.Callback() {
        @Override public boolean tryCaptureView(View child, int pointerId) {
          return child == indicator;
        }

        @Override public int clampViewPositionHorizontal(View child, int left, int dx) {
          final int leftBound = getPaddingLeft();
          final int rightBound = getWidth() - indicator.getWidth() - leftBound;
          final int newLeft = Math.min(Math.max(left, leftBound), rightBound);
          return newLeft;
        }

        @Override public void onViewReleased(View releasedChild, float xvel, float yvel) {
          if (indicator == releasedChild) {
            if (releasedChild.getLeft() > ((endPointX - startPointX) / 2)) {
              textView.setText("FRUSTRATION");
              helper.settleCapturedViewAt(endPointX, getPaddingTop());
            } else {
              textView.setText("INDICATOR");
              helper.settleCapturedViewAt(startPointX, getPaddingTop());
            }
            invalidate();
          }
        }
      };

1 个答案:

答案 0 :(得分:0)

似乎我们对setText(),setMargin()采取的每一个动作都会导致孩子的布局重置。所以经过大量的实验,我发现我们应该重新布局视图。 可以这么说,如果你在onViewReleased()或onViewPositionChanged()中使用setText(),setMargin()或类似的影响它的布局,你应该保存它的当前位置,然后使invalidate()然后将它与child.layout一起使用( )当onLayout()触发时。

希望它会帮助别人。问题已经结束。