任务: 显示有两个view主成,下层为ImageView 来显示图片,上层为一普通view显示若干关键点。通过手指滑动,拖某个关键点在屏幕上移动。在平板上,发现刷新成了问题,关键点的移动明显慢。
思路:用surfaceiew 来替代上次的普通view,在OnTouch 函数中直接刷屏,而不是依靠invalidate。
困难 1: 因为要显示下层的imageview,如何设置surfaceview的透明?
解决:
setZOrderOnTop(true);
mHolder.setFormat(PixelFormat.TRANSPARENT);
困难 2: 透明的surfaceview,如果清屏。
常用的函数:canvas.drawColor(Color.TRANSPARENT); 是没有效果的。
经过研究,发现应该使用: canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);
前者采用的默认模式是: srcover 。[Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc],这个在透明度0的情况下,当然不行了。
结果: 关键点移动明显快,优化效果明显。