2015-11-13 29 views
0

我有一個自定義的Horizo​​ntalScrollView.But在類中,方法smoothScrollTo不起作用。下面的代碼是我的。自定義的Horizo​​ntalScrollView,方法smoothScrollTo不起作用

public class MyHorizontalScrollView extends HorizontalScrollView { 
private int flagPosition; 
private int scrollX; 
private int windowWidth; 

public MyHorizontalScrollView(Context context) { 
    super(context); 
    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    DisplayMetrics outMetrics = new DisplayMetrics(); 
    manager.getDefaultDisplay().getMetrics(outMetrics); 
    windowWidth = outMetrics.widthPixels; 

    flagPosition = windowWidth/2; 
} 

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

    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    DisplayMetrics outMetrics = new DisplayMetrics(); 
    manager.getDefaultDisplay().getMetrics(outMetrics); 
    windowWidth = outMetrics.widthPixels; 

    flagPosition = windowWidth/2; 
} 

public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    DisplayMetrics outMetrics = new DisplayMetrics(); 
    manager.getDefaultDisplay().getMetrics(outMetrics); 
    windowWidth = outMetrics.widthPixels; 

    flagPosition = windowWidth/2; 
} 

@Override 
public void setSmoothScrollingEnabled(boolean smoothScrollingEnabled) { 
    super.setSmoothScrollingEnabled(true); 
} 

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    int action = ev.getAction(); 
    switch (action) { 
     case MotionEvent.ACTION_DOWN: 
      break; 
     case MotionEvent.ACTION_MOVE: 
      scrollX = getScrollX(); 
      break; 
     case MotionEvent.ACTION_UP: 
      scroll(); 
      break; 
    } 
    return super.onTouchEvent(ev); 
} 

private void scroll() { 
    if (scrollX <= flagPosition/2) { 
     smoothScrollTo(0, 0); 
    } else{ 
     smoothScrollTo(flagPosition, 0); 
    } 
} 

@Override 
protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
    scrollX = getScrollX(); 
    Log.v("my", "myscroll======+++++++onscrollchange" + scrollX); 
} 
} 

我想,我滾動Horizo​​ntalScrollView,當我滾動到一個範圍,然後提升我的手指因此,Horizo​​ntalScrollView將滾動到特定位置全自動。

這是我的code.Inside方法scroll(),我切換smoothScrollTo.It不工作,但方法scrollTo工作。我不知道爲什麼。

回答

0

我把代碼的類中:

private Runnable run = new Runnable() { 
     @Override 
     public void run() { 
      if (scrollX <= flagPosition/2) { 
       MyHorizontalScrollView.this.smoothScrollTo(0, 0); 
      } else { 
       MyHorizontalScrollView.this.smoothScrollTo(flagPosition, 0); 
      } 
     } 
    }; 

    @Override 
    public boolean post(Runnable action) { 
     return super.post(action); 
    } 

然後更換後的方法smoothScrollTo()和我認識的影響。

相關問題