0

我使用OverScroller来实现视图的滚动。

这是一些代码:

@Override
protected void onDraw(Canvas canvas) {
    if (scroller.computeScrollOffset()){
        int x = scroller.getCurrX();
        int y = scroller.getCurrY();
        scrollTo(x, y);

        ViewCompat.postInvalidateOnAnimation(this);
    }

    super.onDraw(canvas);
}

public void open(){
    scroller.startScroll(0, 0, 0, -mContent.getMeasuredHeight(), ANIMATION_TIME);
    invalidate();
}

public void close(){
    scroller.startScroll(0, getScrollY(), 0, mContent.getMeasuredHeight(), ANIMATION_TIME);
    invalidate();
}

它工作正常。但是在具有全高清屏幕(索尼 xperia Z)的设备上,方法 onDraw 调用了 4 次。在“Samsung Galaxy Note 2”上,它调用了大约 10 次。因此在 xperia 上我看到了滞后。我能做些什么来提高性能?

UPD:这是完整的代码http://xsnippet.org/359714

4

2 回答 2

2

你应该为类似的事情覆盖 computeScroll() 而不是 onDraw()

于 2013-12-02T14:02:14.997 回答
-1

您可以在自定义 View 类中重写onFinishInflate ()方法,并且可以在此方法下编写 OverScroll 相关代码而不是onDraw()。更多详情请点击这里

于 2013-12-02T13:23:48.433 回答