在Android中使用大尺寸可绘制和自定义视图

时间:2011-11-17 12:43:06

标签: android view bitmap drawable android-custom-view

我知道这已经一遍又一遍地讨论过,但我找不到适合我需要的解决方案。

场景:为了简化说明,我有一个自定义视图,其中两个图像显示为背景较大的图像,较小的图像显示为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();

可能的解决方案:我可以创建一个新的自定义视图,它只能绘制背景图像并在其上面,放置我当前的视图并发送触摸事件,当案例到我的背景图像视图时。这将允许我仅在需要时重绘背景图像。还有其他想法吗?

1 个答案:

答案 0 :(得分:2)

我遇到了类似的性能问题,我找到的解决方案就是我所说的here。与您已经建议的类似,基本上背景只绘制一次,自定义ImageView处理其触摸事件的所有转换。