Използвал съм го 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();
}
Той работи добре. Но на устройството с Full HD екран (Sony xperia Z) методът onDraw се обажда 4 пъти. На "Samsung Galaxy Note 2" се обажда около 10 пъти. Затова на xperia виждам закъснения. Какво мога да направя, за да подобря ефективността?
UPD: Ето пълен код http://xsnippet.org/359714
Отговори:
1 за отговор № 1трябва да преименувате computeScroll () за такива неща, а не за Draw ()
-1 за отговор № 2
Можете да промените onFinishInflate () метод в своя персонализиран клас "Изглед" и можете да напишете код, свързан с OverScroll, по този метод вместо onDraw (), За повече подробности Натисни тук.