2016-08-27 42 views
1

在FrameLayout中有一個可以拖動的子TextView,但是當我嘗試更改文本或此邊距時,onViewReleased和onViewPositionChanged方法無法正常工作(回滾到原始位置) TextView,而它是滾動。我不確定我是否正確使用它,或者有些事情我應該知道。代碼ViewDragHelper無法正常工作

部分:

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(); 
      } 
     } 
     }; 

回答

0

這似乎是一個大量的實驗後,每次我們採取的setText(),setMargin()此舉將導致兒童的佈局reset.So,我發現我們應該重新佈局風景。 只要你說setText(),setMargin()或者像這樣影響它在onViewReleased()或onViewPositionChanged()中的佈局,你應該保存它的當前位置,然後invalidate()然後在child.layout中使用它()當onLayout()被觸發時。

希望它能幫助別人。問題關閉了。