2012-01-13 164 views
0

我的問題是當我使用滾輪並在上面畫畫布時。它會平滑滾動,但是當我繪製位圖+畫布時,滾動滾動非常緩慢意味着滾動這很重要,爲什麼它滾動速度非常慢。如何滾動平滑滾動?

如何解決這個問題?

+0

對不起,你的問題是由不道德的用戶回答的。我建議你檢查這個問題:http://stackoverflow.com/questions/4951142/smooth-scrolling-in-android – Will 2012-04-13 18:49:12

回答

1

我有OpenGL也不加速度計,但刷卡(稱爲甩在Android的API)沒有經驗並不難實現。你做出這樣的自定義視圖時需要的第一件事情,正在實施一項GestureDetector,並調用其onTouchEvent()在您看來的onTouchEvent()

GestureDetector mGD = new GestureDetector(getContext(), 
             new SimpleOnGestureListener() { 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, 
           float distanceX, float distanceY) { 
     // beware, it can scroll to infinity 
     scrollBy((int)distanceX, (int)distanceY); 
     return true; 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float vX, float vY) { 
     mScroller.fling(getScrollX(), getScrollY(), 
       -(int)vX, -(int)vY, 0, (int)mMaxScrollX, 0, (int)mMaxScrollY); 
     invalidate(); // don't remember if it's needed 
     return true; 
    } 

    @Override 
    public boolean onDown(MotionEvent e) { 
     if(!mScroller.isFinished()) { // is flinging 
      mScroller.forceFinished(true); // to stop flinging on touch 
     } 
     return true; // else won't work 
    } 
}); 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    return mGD.onTouchEvent(event); 
} 

雖然OnGestureListener.onScroll()直接調用View.scrollBy(),爲onFling()方法,你需要一個滾輪。

Scroller的是,作爲參考說,封裝了滾動一個簡單的對象。它可以用於連續滾動或對fl react作出反應。 Scroller.fling()開始一扔滾動的「模擬」裏面本身,通過觀察它,你可以用連續重繪動畫複製其光滑度:

@Override 
protected void onDraw(Canvas canvas) { 
    // ....your drawings.... 

    // scrollTo invalidates, so until animation won't finish it will be called 
    // (used after a Scroller.fling()) 
    if(mScroller.computeScrollOffset()) { 
     scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); 
    } 
} 

也就是說,直到動畫運行時,計算我們到達了點,滾動有。

作爲最後一個音符:記得在你的OnGestureListener.onDown()返回true,即使你不想下來做任何事情,否則將無法正常工作。

並且要小心,因爲Android 2.2中的Scroller有一個錯誤,即使它達到了作爲參數傳遞的限制,但它並不會實際結束,但計算出的偏移量會尊重它們,所以它實際上不會移動) 。

+0

嗨邁克,thanx的reply.this這個概念,它工作正常,當只有畫布是畫BTI時IM繪製圖像+畫布(位圖),它不能正常工作。 – 2012-01-13 11:34:53

+1

從這裏被盜http://stackoverflow.com/a/4951681/1228 – Will 2012-04-13 18:48:41