我使用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次。在"三星Galaxy Note 2"上,它会呼叫大约10次。因此,在xperia上我看到了滞后。我能做些什么来提高性能?
UPD:这是完整的代码http://xsnippet.org/359714
您应该为类似的事情覆盖computeScroll(),而不是onDraw()
您可以在自定义View类中重写onFinishInflate()方法,并且您可以在该方法下而不是onDraw()下编写OverScroll相关代码。有关更多详细信息,请单击此处。