我已经实现来类似桌面launcher滑动的效果在自己的应用里面。用的一个Scroller,scrollBy(), startScroll()等 基本上和launcher实现类似
但是发现我的滑动不如桌面那样平滑,
我感觉不是算法问题, 我猜测是cache方面的优化问题?
请问大家知道是什么原因么?
大胆猜测,或者有什么好的建议,欢迎讨论!
但是发现我的滑动不如桌面那样平滑,
我感觉不是算法问题, 我猜测是cache方面的优化问题?
请问大家知道是什么原因么?
大胆猜测,或者有什么好的建议,欢迎讨论!
问一下, 你确定你实现的是桌面那样滑动吗?
如果用简单一点的图片演示的话,基本上和桌面是一个效果了所以我感觉是要怎样优化一下目前毫无头绪。。 恳求给点建议!
我还在launcher的源码workspace.java里面提取了一些貌似很有用的优化代码
// The following implementation attempts to fast-track
// the drawing dispatch by drawing only what we know needs to be
正如他所说,这个是减少多余的重绘,只关心我们需要重绘的区域
@Override
protected void dispatchDraw(Canvas canvas) { boolean restore = false;
int restoreCount = 0; // ViewGroup.dispatchDraw() supports many features we don't need:
// clip to padding, layout animation, animation listener, disappearing
// children, etc. The following implementation attempts to fast-track
// the drawing dispatch by drawing only what we know needs to be drawn. boolean fastDraw = mTouchState != TOUCH_STATE_SCROLLING ;
// If we are not scrolling or flinging, draw only the current screen
if (fastDraw) {
drawChild(canvas, getChildAt(mCurrentScreen), getDrawingTime());
} else {
final long drawingTime = getDrawingTime();
final float scrollPos = (float) mScrollX / getWidth();
final int leftScreen = (int) scrollPos;
final int rightScreen = leftScreen + 1;
if (leftScreen >= 0) {
drawChild(canvas, getChildAt(leftScreen), drawingTime);
}
if (scrollPos != leftScreen && rightScreen < getChildCount()) {
drawChild(canvas, getChildAt(rightScreen), drawingTime);
}
} if (restore) {
canvas.restoreToCount(restoreCount);
}
}