桌面循环的Launcher主要是需要通过canvas的translate(dx, dy)来实现。比如现在有5屛,当屏幕向右滑动的时候,当mCurrentScreen=4(下标从0开始)时,继续往右滑动,这个时候需要判断该桌面是否需要循环,如果需要循环需要对代码做特殊处理,详细见代码:
修改1:Worksapce的onTouchEvent()方法:
if (mTouchX > 0) {
mTouchX += Math.max(-mTouchX, deltaX);
mSmoothingTime = System.nanoTime() / NANOTIME_DIV;
invalidate();
} else if (true && mTouchX > -getWidth()) {
mTouchX += deltaX;
mSmoothingTime = System.nanoTime() / NANOTIME_DIV;
invalidate();
}
} else if (deltaX > 0) { // right
/*final float availableToScroll = getChildAt(getChildCount() - 1).getRight() -
mTouchX - getWidth();*/
final float availableToScroll = getChildAt(getChildCount() - 1).getRight() -
mTouchX - (true ? 0 : getWidth());
if (availableToScroll > 0) {
mTouchX += Math.min(availableToScroll, deltaX);
mSmoothingTime = System.nanoTime() / NANOTIME_DIV;
invalidate();
}
} else {
awakenScrollBars();
}
修改2:Workspace的onTouchEvent()的up处。