j'ai utilisé OverScroller pour la mise en œuvre de défilement de mon point de vue.
Voici du code:
@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();
}
Ça fonctionne bien. Mais sur les appareils avec écran Full HD (Sony xperia Z), la méthode onDraw appelle 4 fois. Sur "Samsung Galaxy Note 2", il appelle environ 10 fois. Par conséquent, sur xperia, je vois des retards. Que puis-je faire pour améliorer les performances?
UPD: Voici le code complet http://xsnippet.org/359714
Réponses:
1 pour la réponse № 1vous devriez écraser computeScroll () pour des choses comme ça et pas onDraw ()
-1 pour la réponse № 2
Vous pouvez remplacer onFinishInflate () méthode dans votre classe View personnalisée et vous pouvez écrire du code associé à OverScroll sous cette méthode au lieu de onDraw (). Pour plus de détail cliquez ici.