Eu tenho usado OverScroller para implementar o scroll da minha view.
Aqui está algum código:
@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();
}
Funciona bem. Mas no dispositivo com tela Full HD (Sony xperia Z) o método onDraw liga 4 vezes. Em "Samsung Galaxy Note 2", ele chama cerca de 10 vezes. Por isso, no xperia eu vejo atrasos. O que posso fazer para melhorar o desempenho?
UPD: Aqui está o código completo http://xsnippet.org/359714
Respostas:
1 para resposta № 1você deve substituir computeScroll () para coisas assim e não onDraw ()
-1 para resposta № 2
Você pode substituir onFinishInflate () método em sua classe View personalizada e você pode escrever código relacionado OverScroll sob este método em vez de onDraw (). Para mais detalhes Clique aqui.