Android View.onDraw() 总是有一个干净的 Canvas

2023-12-27

我正在尝试画动画。为此,我扩展了 View 并重写了 onDraw() 方法。我期望的是,每次调用 onDraw() 时,画布都会处于我保留它的状态,我可以选择清除它或只绘制它的一部分(这就是我使用 SurfaceView 时的工作方式) )但每次画布回来时都已经清除了。有什么办法可以让我不清除它吗?或者也许将以前的状态保存到位图中,这样我就可以绘制该位图,然后在它上面绘制?


我不确定是否有办法。但对于我的自定义视图,我要么在每次调用 onDraw() 时重新绘制所有内容,要么绘制位图,然后将位图绘制到画布上(就像您在问题中建议的那样)。

我是这样做的

class A extends View {

    private Canvas canvas;
    private Bitmap bitmap;

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        if (bitmap != null) {
            bitmap .recycle();
        }
        canvas= new Canvas();
        bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        canvas.setBitmap(bitmap);
    }
    public void destroy() {
        if (bitmap != null) {
            bitmap.recycle();
        }
    }
    public void onDraw(Canvas c) {
      //draw onto the canvas if needed (maybe only the parts of animation that changed)
      canvas.drawRect(0,0,10,10,paint);

      //draw the bitmap to the real canvas c
      c.drawBitmap(bitmap, 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), null);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android View.onDraw() 总是有一个干净的 Canvas 的相关文章

随机推荐

  • Apache Beam:使用 Withtimestamp 分配事件时间时出错

    我有一个无限的 Kafka 流发送具有以下字段的数据 identifier xxx value 10 0 ts 2019 01 16T10 51 26 326242 0000 我使用 kafka 的 apache beam sdk 读取流
  • 电子邮件中的 Button_to 未发布

    请参阅此问题的演变的更新 在我的网站上 每个用户都有一个仪表板 他 她可以在其中单击链接来接受或拒绝请求 根据单击的内容 请求记录将使用相关状态进行修补 为了让用户更方便 我尝试将此仪表板嵌入到发给他们的电子邮件中 这样他们就不必直接访问该
  • 路径查找算法:A* 与跳跃点搜索

    我知道 A 比 Dijkstra 算法更好 因为它考虑了启发式值 但是从 A 和跳跃点搜索来看 哪种算法是在有障碍物的环境中找到最短路径的最有效算法 有何不同 跳跃点搜索是基于图表上的某些条件的改进的 A 因此 如果满足这些条件 主要是统一
  • 在游乐场导入神无

    有没有办法添加 Kanna https github com tid kijyun Kanna https github com tid kijyun Kanna 到 XCode 中的 Playground 我尝试过手动安装并通过 Coco
  • 使用 C# 保护内存中的敏感数据

    我有一个 C 应用程序 它用敏感数据初始化一些变量 它们不是密码 但我们认为它们很敏感 我要保护的变量值都是字符串类型 我想做的是找到一种机制 我知道没有 100 的机制 让我能够保护内存中的变量值 或者至少让攻击者更难读取它们 因此 我可
  • 如何在 php 中使用通过 header() 传递的变量

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在用着header 传递变量use
  • 如何为 Bootstrap 制作响应式(行流体)Mixin

    我可以用以下代码替换此代码 div class row div class span10 div div class span2 div div 有了这个 使其更加语义化 div class article div class main s
  • Visual Studio 2010 Qt 链接问题

    我花了整个周末试图解决这个问题 现在我已经迈出了最后一步 我的目标 让 Visual Studio 2010 和 Qt 4 7 3 一起工作 我从源代码安装了 Qt 指定使用以下配置进行构建 configure exe debug and
  • 使用 SimpleDateFormat 解析奇怪的日期和时间结果

    使用 SimpleDateFormat 解析 ISO8601 日期和时间时遇到一个奇怪的问题 相关代码是 public class DateHelper private static SimpleDateFormat iso8601form
  • Drone.io 在本地构建,无需推送到存储库

    io团队和爱好者 我在本地测试了 Drone io 我喜欢它 有没有办法在本地使用 Drone io 而不推送到存储库 我想在开发人员环境中使用它 这意味着开发人员可以在推送到存储库之前测试他们的代码 可以这样做吗 你可以运行 drone
  • Delphi v10.2.2 升级到 v10.2.3 后 Android 库“将系统文件恢复为默认值”破坏了编译

    将 Delphi 从 v10 2 2 升级到 v10 2 3 后 TBannerAd 横幅在尝试调用 LoadAd 方法时引发异常 在了解到 Tokyo 10 2 3 已更新 Google Play 服务及其库 后 升级到Delphi v1
  • 使用 Bloch 的构建器模式是否会对内存和性能造成影响?

    与仅使用构造函数创建对象相比 内存和性能使用情况如何 这里的用法是创建一个Set or List它可能包含数百万个以上的条目 我担心使用布洛赫的构建器模式的开销 我以前用过它 但从未在这么大的范围内使用过 参考 第 2 项 在面对许多构造函
  • 时间戳的正则表达式

    显然我对正则表达式很糟糕 这对我来说毫无意义 我想要一个匹配时间的表达式 例如01 23 45在一个字符串内 我试过这个 r 0 9 2 2 0 9 2 但它不起作用 我需要能够获取整个时间戳 我尝试过的其他人只找到了大约 2 位数字 恐怕
  • 在 Java 中声明项目常量的正确方法是什么?

    对于 Java 开发人员来说 这似乎是一个愚蠢的问题 但是 我是 Java 新手 而且我的背景是低级 c 语言 我曾经包含一个头文件 其中包含与我的项目相关的所有常量 通常是 define 我现在正在开发一个大型 Java 项目 我需要将一
  • .NET MVC 3 部署包缺少引用

    在 ASP NET MVC3 项目中 我有这样的结构 Core csproj gt 3rdparty1 dll gt 3rdpartyreference dll gt 3rdparty2 dll Web csproj gt core dll
  • Java发生在线程启动之前

    我在某处读到 启动线程对发生之前的关系有一些特殊的影响 现在我不确定我的代码是否保证发生在关系之前 所以请赐教 我有一个 Dispatcher 线程和一个实现的 Worker 类Runnable界面 Dispatcher 线程创建一个新的
  • 如何在 JavaScript 中记录获取的网络资源?

    有没有办法访问浏览器请求的资源列表 在 Chrome 检查器的网络面板中找到的资源 我希望能够迭代这些获取的资源以显示已访问的域 例如 for var i 0 i lt window navigator resources length i
  • Spring Boot 和 Spring Cloud Security OAUTH 2 SSO 在最新版本中失败

    我正在尝试使用 OAuth 将示例 Spring Boot 和 Spring Cloud Security 从 Spring Boot 1 4 1 Brixton RELEASE 升级到 Spring Boot 1 5 3 Dalston
  • 提交后钩子以 svn 中的用户身份运行

    Apache 在 Windows 机器上作为 SYSTEM 运行 post commit bat 应该使用什么用户和密码 我正在尝试将内容复制到目录以在网络服务器上的开发人员版本上进行测试 但似乎无法正常工作 挂钩脚本将由服务器启动 因此您
  • Android View.onDraw() 总是有一个干净的 Canvas

    我正在尝试画动画 为此 我扩展了 View 并重写了 onDraw 方法 我期望的是 每次调用 onDraw 时 画布都会处于我保留它的状态 我可以选择清除它或只绘制它的一部分 这就是我使用 SurfaceView 时的工作方式 但每次画布