我知道这已经一遍又一遍地讨论过,但我找不到适合我需要的解决方案。
场景:为了简化说明,我有一个自定义视图,其中两个图像显示为背景较大的图像,较小的图像显示为Wheel。用户可以使用onTouch事件旋转/缩放背景图像。他还可以旋转Wheel图像进行一些操作。一切都是在自定义View而不是SurfaceView上完成的,因为我需要它是透明的。
问题:使用onDraw()我总是需要检查旋转/缩放具有背景图像的内容,缩放/旋转它然后绘制它。如果背景图像较小,让我们说512x512轮子图像旋转正常。如果背景图像较大,1280x1707,则车轮图像旋转滞后。所以我的猜测是,在背景中操作和旋转大图像,对于每个onDraw()都会给我带来性能问题,基本上应该重绘背景图像,只有用户操作它。
轮换完成如下:
canvas.save();
float dx = (maxX + minX) / 2;
float dy = (maxY + minY) / 2;
drawable.setBounds((int) minX, (int) minY, (int) maxX, (int) maxY);
canvas.translate(dx, dy);
canvas.rotate(angle * 180.0f / (float) Math.PI);
canvas.translate(-dx, -dy);
drawable.draw(canvas);
canvas.restore();
可能的解决方案:我可以创建一个新的自定义视图,它只能绘制背景图像并在其上面,放置我当前的视图并发送触摸事件,当案例到我的背景图像视图时。这将允许我仅在需要时重绘背景图像。还有其他想法吗?