package com.xw.common.custom.loopView;
|
|
import com.xw.common.utils.LogUtils;
|
|
final class InertiaTimerTask implements Runnable {
|
|
float a;
|
final float velocityY;
|
final LoopView loopView;
|
|
InertiaTimerTask(LoopView loopview, float velocityY) {
|
super();
|
loopView = loopview;
|
this.velocityY = velocityY;
|
a = Integer.MAX_VALUE;
|
}
|
|
@Override
|
public final void run() {
|
if (a == Integer.MAX_VALUE) {
|
if (Math.abs(velocityY) > 2000F) {
|
if (velocityY > 0.0F) {
|
a = 2000F;
|
} else {
|
a = -2000F;
|
}
|
} else {
|
a = velocityY;
|
}
|
}
|
if (Math.abs(a) >= 0.0F && Math.abs(a) <= 20F) {
|
LogUtils.i("gy","WHAT_SMOOTH_SCROLL_INERTIA");
|
loopView.handler.sendEmptyMessageDelayed(MessageHandler.WHAT_SMOOTH_SCROLL_INERTIA,60);
|
loopView.cancelFuture();
|
loopView.handler.sendEmptyMessage(MessageHandler.WHAT_SMOOTH_SCROLL);
|
return;
|
}
|
int i = (int) ((a * 10F) / 1000F);
|
LoopView loopview = loopView;
|
loopview.totalScrollY = loopview.totalScrollY - i;
|
if (!loopView.isLoop) {
|
float itemHeight = loopView.lineSpacingMultiplier * loopView.itemTextHeight;
|
if (loopView.totalScrollY <= (int) ((float) (-loopView.initPosition) * itemHeight)) {
|
a = 40F;
|
loopView.totalScrollY = (int) ((float) (-loopView.initPosition) * itemHeight);
|
} else if (loopView.totalScrollY >= (int) ((float) (loopView.items.size() - 1 - loopView.initPosition) * itemHeight)) {
|
loopView.totalScrollY = (int) ((float) (loopView.items.size() - 1 - loopView.initPosition) * itemHeight);
|
a = -40F;
|
}
|
}
|
if (a < 0.0F) {
|
a = a + 20F;
|
} else {
|
a = a - 20F;
|
}
|
loopView.handler.sendEmptyMessage(MessageHandler.WHAT_INVALIDATE_LOOP_VIEW);
|
}
|
}
|