2012-01-13 165 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