首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android -在画布上绘图在Runnable中不起作用

Android是一个基于Linux的开源操作系统,主要用于移动设备和平板电脑。它由Google开发,并且在全球范围内得到广泛应用。Android操作系统具有开放性、灵活性和可定制性的特点,可以支持各种类型的应用程序开发。

在Android中,可以使用画布(Canvas)来绘制图形和文字。绘图操作通常在UI线程中进行,但是如果在UI线程中进行复杂的绘图操作,可能会导致界面卡顿或者无响应。为了避免这种情况,可以使用Runnable在后台线程中进行绘图操作。

然而,如果在Runnable中直接进行绘图操作,是不会起作用的。这是因为绘图操作必须在UI线程中进行,而Runnable在后台线程中执行,无法直接操作UI。为了解决这个问题,可以使用Handler或者View.post方法将绘图操作发送到UI线程中执行。

以下是一个示例代码,展示了如何在Runnable中绘制图形:

代码语言:txt
复制
public class MyView extends View {
    private Paint paint;

    public MyView(Context context) {
        super(context);
        paint = new Paint();
        paint.setColor(Color.RED);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(100, 100, 50, paint);
    }
}

public class MainActivity extends AppCompatActivity {
    private MyView myView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myView = findViewById(R.id.my_view);

        // 在Runnable中绘制图形
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                // 在UI线程中执行绘图操作
                myView.post(new Runnable() {
                    @Override
                    public void run() {
                        myView.invalidate(); // 刷新界面
                    }
                });
            }
        };

        // 在后台线程中执行绘图操作
        new Thread(runnable).start();
    }
}

在上述代码中,我们创建了一个自定义的View类MyView,重写了onDraw方法,在其中使用Canvas绘制了一个红色的圆形。然后,在MainActivity中,我们通过Runnable在后台线程中执行绘图操作,并通过myView.post方法将绘图操作发送到UI线程中执行,最后调用myView.invalidate方法刷新界面。

这样,就可以在Runnable中实现在画布上绘图的效果。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript 编程精解 中文第三版 十七、画布绘图

十七、画布绘图 原文:Drawing on Canvas 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《JavaScript 编程精解(第 2 版)》...诚然,我们可以绘制另一组精灵,但我们也可以使用另一种方式画布绘图。 我们可以调用scale方法来缩放之后绘制的任何元素。...DOM 也可以允许我们图片的每一个元素(甚至 SVG 画出的图形)注册鼠标事件的处理器。画布里则实现不了。 但是画布的基于像素的方法需要绘制大量的微小元素时会有优势。...它不会构建新的数据结构而是仅仅重复的同一个像素绘制,这使得画布每个图形拥有更低的消耗。...一个画布展示动画时,clearRect方法可以用来重绘之前清除画布的某一部分。 习题 形状 编写一个程序,画布上画出下面的图形。

3.7K30

为什么 strace Docker 不起作用

这里的问题是 —— 如果我笔记本的 Docker 容器运行 strace,就会出现这种情况: $ docker run -it ubuntu:18.04 /bin/bash $ # ... install...这个问题很容易解决 —— 我的机器,是这样解决的: docker run --cap-add=SYS_PTRACE -it ubuntu:18.04 /bin/bash 但我对如何修复它不感兴趣,...但这实际是不合理的,原因有两个。 原因 1:实验,作为一个普通用户,我可以对我的用户运行的任何进程进行 strace。...而 ptrace 在被 Docker 默认的 seccomp 配置文件阻止的系统调用列表!(实际,允许的系统调用列表是一个白名单,所以只是ptrace 不在默认的白名单。... containerd 的 seccomp 实现 contrib/seccomp/seccomp/seccomp_default.go ,有一堆代码来确保如果一个进程有一个能力,那么它也会(通过

6.2K30

OpenCV Android 的应用

OpenCV 介绍 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统。...移动端上使用 OpenCV 可以完成一系列图像处理的工作。 二. OpenCV Android 的配置 我项目中使用的 OpenCV 版本是 4.x。... Android Studio 创建一个 Library,将官网下载的 OpenCV 导入后,就可以直接调用 OpenCV Java 类的方法。...例子两则 3.1 作为二维码识别的兜底方案 Android 原生开发,二维码识别有老牌的 zxing 等开源库。为何还要使用 OpenCV 呢?...但是它本身体积也较大,移动端使用至少会增加 Android Apk 包 10 M+ 的体积(主要取决于 App 要支持多少个 CPU 架构)。

2.1K10

AspectJandroid的开发

Android运用AOP的思想开发,可以快速的帮助我们简化横向开发的重复性工作,简单的说就是把涉及到众多模块的某一类问题进行统一管理比如:性能检测、日志打印手机等。...AspectJ实际是对AOP编程思想的一个实践,当然,除了AspectJ以外,还有很多其它的AOP实现,例如ASMDex、javassist等,但目前最好、最方便的,依然是AspectJ。...直接贴例子 引入插件,这边是添加在app.gradle, 不是添加在项目的gradle import org.aspectj.bridge.IMessage import org.aspectj.bridge.MessageHandler...//全局变量配置编译项以及,对应的log输出 variants.all { variant -> if (!.../Android-AOPExample 熟悉了一遍 补充:Android-AOPExample的例子下载下来,gradle版本再2.3.0及其以上的版本编译会出现问题 报错误:No such property

1.3K20

eBPFandroid的使用

对于eBPF可以简单的理解成kernel实现了一个虚拟机机制,将类C代码编译成字节码(后文有详细解释),挂在到内核的钩子,当钩子被触发时,kernel虚拟机的"沙盒"运行字节码,这样既能方便的实现很多功能...BCCandroid系统也可以运行,但是要对系统进行一定程度的修改,后续可能会写单独的文章进行讲解。对于内核开发者我还比较关注怎么自己来实现监控的功能,下文也将做简单的讲解。 ?...1. android系统对eBPF的编译支持 目前android编译系统已经对eBPF进行了集成,通过android.bp就能很方便的android源代码编译eBPF的字节码。...3)将fd包装成BpfMap,androidBpfMap.h定义了很多方便的函数。 4)遍历map回调函数。...返回值必须是android::netdutils::status::ok(android的新版本已经进行修改)。 5.

4.1K10

Python绘图,更丰富,更专业

Python成为优秀的绘图工具(对比Excel)的一个原因是,可以轻松地从Internet获取数据,然后使用Python进行绘图。如果我们需要使用一些在线数据并想在Excel绘图,我们该怎么办?...也许把它下载到我们的电脑,然后把它画出来,或者使用笨重的VBA或Power Query获取数据,然后将其绘制成图形。如果你以前做过的话,相信这些都不是好经验。...我们将使用约翰·霍普金斯大学的COVID19数据库本文中绘制随时间推移的确诊病例。...pandas依赖另一个名为matplotlib的库进行绘图,因此我们还必须导入该库。否则,你的pandas绘图就不会出现。...但是必须记住,绘制后要让matplotlib显示图形,就需要使用plt.show()。

1.8K20

List.append() Python 不起作用,该怎么解决?

Python ,我们通常使用 List.append() 方法向列表末尾添加元素。然而,某些情况下,你可能会遇到 List.append() 方法不起作用的问题。...变量重新赋值 Python ,列表是可变对象,也就是说,它们可以通过引用进行修改。...由于 my_list 和 new_list 引用同一个列表对象,因此对 new_list 的修改也会反映在 my_list 。2....列表作为函数参数另一个导致 List.append() 方法不起作用的常见情况是将列表作为函数的参数传递。 Python ,函数参数传递是通过对象引用实现的。...结论List.append() 方法 Python 通常是一个方便且常用的方法,用于向列表末尾添加元素。然而,当遇到某些情况时,它可能不起作用

2.3K20

Android用AI识别物体

今天我们来看看如何在Android实现这个功能。 物体识别 物体识别包括两个方面,一个是物体位置识别,划出图片中的物体什么位置。另一个是物体识别,告诉你这是个什么物体,是人是狗,是桌子还是鸟。...我们把这个网络落地到Android看看它的效果怎样。 Android导入AI框架 要在Android使用AI网络,首先需要集成能够解读AI网络的框架。...Google的TensorflowAndroid做了专门的框架 - Tensorflow-Lite,它能够移动端上高性能地运算AI模型。...首先需要在app的build.gradle里引入它 dependencies { implementation 'org.tensorflow:tensorflow-lite:1.10.0' } Android...因为正常来说,网络只能输出一个一维数组表示每个标签的概率,它并不会输出用文字描述的物体… 细想一下要是真这样的话那就恐怖了… 我们的app需要先把这两个东西放进去,下面这两个就是网络和标签了 ?

4.2K60

macOS 10.12 编译 Android 5.1

本文介绍下如何在在macOS 10.12 编译 Android 5.1源码,导入源码到Android Studio,把系统烧录到Nexus6手机。.../storage-googleapis.proxy.ustclug.org/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo 2、之前创建的大小写分区建立一个工作目录...---- 编译 设置文件描述符限制 macOS,默认限制的同时打开的文件数量很少,不能满足编译过程的高并发需要,因此需要在shell运行命令: $ ulimit -S -n 1024 环境设置...源码根目录下调用下面的命令: $ source build/envsetup.sh 选择设备 因为我编译后需要烧录到Nexus6,所以选择aosp_shamu-userdebug $ lunch aosp_shamu-userdebug...如果要支持跳转的话,还需要做些配置,可以看这篇教程:Import AOSP into Android Studio ---- 刷机 Nexus6手机在打开USB调试,连接电脑后允许调试这台手机,并且设置打开

1.9K40

ProGuard Android 的使用姿势

如果以上还不足以说服您使用 ProGuard,其实移除无用代码和混淆所有名称还有其他更多的优化效果: 一些版本的 Android 设备,DEX 代码会在安装或者运行时被编译成机器码。...一次 Android 典型的构建过程,AAPT(处理资源的工具)会生成一个额外的 ProGuard 规则文件。...这些警告的一个原因就是,您的构建路径没有加入需要依赖的 JARs,如使用了 provided (仅编译时)依赖。而有时候, Android 这些代码的依赖在运行时并不会被真正的调用。...某些情况下,ProGuard 的警告确实有助于您发现闪退的罪魁祸首和关于您配置的其他问题。...tools 目录下(SDK/tools/proguard/proguard-android.txt),但在新版的 SDK Tools 和 Android Gradle 插件版本2.2.0+,可以构建时从

2.5K40
领券