我知道这个问题已经被反复讨论过,但我找不到适合我需要的解决方案。
场景:为了简单起见,我有一个自定义 View ,它显示两张图片,一张大的作为背景,一张小的作为轮子。用户可以使用 onTouch 事件旋转/缩放背景图像。他还可以旋转车轮图像进行一些操作。一切都在自定义 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();
可能的解决方案: 我可以制作一个新的自定义 View ,它只能绘制背景图像并在其之上放置我当前的 View 并发送触摸事件,如果是我的背景 ImageView .这将允许我仅在需要时重绘背景图像。还有其他想法吗?
最佳答案
我遇到了类似的性能问题,我找到的解决方案就是我描述的 here .与您已经提出的建议类似,背景基本上只绘制一次,自定义 ImageView 处理其触摸事件的所有转换。
关于android - 在 Android 中使用大尺寸可绘制对象和自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8167276/