android - 在 Android 中使用大尺寸可绘制对象和自定义 View

标签 android view bitmap drawable android-custom-view

我知道这个问题已经被反复讨论过,但我找不到适合我需要的解决方案。

场景:为了简单起见,我有一个自定义 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/

相关文章:

Android:将 DONE 键添加到软键盘弃用属性

android - 他们是怎么做到的呢?主屏幕上的对话框

Android - findViewById 返回 null

c# - 从模型列表中获取模型

sql - 在 1 个数据库上授予 View

android - "Can' t compress a recycled bitmap”单个设备异常

delphi - 如何在无需先绘制的情况下获得位图透明度?

bitmap - 将指纹位图转换为 ISO/IEC 19794-2 模板

android - 在 Edittext android 的焦点上显示帮助消息

iphone - 通过点击手势隐藏和显示导航栏