Android Canvas状态save与restore,Kotlin

Android Canvas状态save与restore,Kotlin

    private fun f1() {
        val bitmap = BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)
        val canvas = Canvas(bitmap)

        val paint = Paint(Paint.ANTI_ALIAS_FLAG)
        paint.color = Color.RED
        paint.textSize = 50f
        paint.style = Paint.Style.FILL
        paint.textAlign = Paint.Align.LEFT

        val x = 200f
        val y = 200f

        canvas.drawText("hello", x, y, paint)

        canvas.save() //保存矩阵坐标等画布状态

        canvas.rotate(30f, 0f, 0f)

        canvas.drawText("world", x, y, paint)

        //此处没有canvas.restore(),绘制将紧接着上一笔world绘制。
        canvas.drawText("fly", x + 150, y, paint)

        iv1?.setImageBitmap(bitmap)
    }


    private fun f2() {
        val bitmap = BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)
        val canvas = Canvas(bitmap)

        val paint = Paint(Paint.ANTI_ALIAS_FLAG)
        paint.color = Color.RED
        paint.textSize = 50f
        paint.style = Paint.Style.FILL
        paint.textAlign = Paint.Align.LEFT

        val x = 200f
        val y = 200f

        canvas.drawText("hello", x, y, paint)

        canvas.save() //保存矩阵坐标等画布状态

        canvas.rotate(30f, 0f, 0f)

        canvas.drawText("world", x, y, paint)

        canvas.restore() //恢复到canvas.save()之前的矩阵坐标等画笔状态,接着hello写。
        canvas.drawText("fly", x + 150, y, paint)

        iv2?.setImageBitmap(bitmap)
    }

Android画布Canvas绘图scale & translate,Kotlin-CSDN博客文章浏览阅读440次,点赞4次,收藏11次。文章浏览阅读9.6k次。文章浏览阅读1.8k次。/*Java代码 将Drawable转化为Bitmap */ Bitmap drawableToBitmap(Drawable drawable) { int width = drawable.getIntrinsicWidth();Android Material Design :LinearLayoutCompat添加分割线divider_linearlayout 分割线-CSDN博客。https://blog.csdn.net/zhangphil/article/details/134930229

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/259600.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

hyper-v ubuntu2204指定静态ip地址

虚拟机静态IP设置 虚拟机每次重新启动,都会动态分配IP,这导致我们无法使用一个固定的ip连接到虚拟机内部。解决该问题的最直接有效的办法就是给虚拟机绑定2张网卡,一张用于连接外网、一张用于连接内网。 init 0 关机,也可以从管…

C语言—每日选择题—Day57

指针相关博客 打响指针的第一枪:指针家族-CSDN博客 深入理解:指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 下面程序段() char *str[] {"ABC", "DEF", "GHI"}; puts(str[1]); A:A…

day49_代码生成器EasyCode

IDEA安装插件 easycode插件 使用 修改模板 因为默认模板有些不适用自己项目,所以需要修改,以下是我的模板json文件 生成了Controller,Service,Dao,Entity没有前后端交互的R,需要自己导入 在磁盘新建一个EasyCodeConfig.json,将以下代码赋值粘贴进去, 然后在idea的easycode插…

中央空调冷却塔循环水全自动加药装置PH电导率设备工作原理动画

一:全自动加药装置【概述】 随着在给水、排水处理过程中,常常投加各类化学药剂作为阻垢、杀菌灭藻、混凝、絮凝用,以达到净化水的目的。这些药剂有固体颗粒、液体,在投加过程中必须溶解、稀释及按配比定量投加方能取得最佳效果&am…

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解

之前我们已经学习的Spring、SpringMVC、Mabatis、Maven,详细讲解了Spring、SpringMVC、Mabatis整合SSM的方案和案例,上一节我们学习了SpringBoot的开发步骤、工程构建方法以及工程的快速启动,从这一节开始,我们开始学习SpringBoot…

Leetcode 45 跳跃游戏 II

题意理解: 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。 还是从初始坐标i0的位置到达最后一个元素,但是问题不是能不能跳到,而是最少几步能跳到最后一个元素。 目标&…

鼠标响应突然不灵敏的检查方法

鼠标突然响应缓慢或者失灵,如下检测步骤: 1、首先排查电源问题,更换电池或者充电; 2、观察光标移动响应、鼠标左键响应、鼠标右键响应、鼠标滚轮等操作,哪些正常,哪些异常。 2、把鼠标接到别的机器上实验…

对Ubuntu20.04.2 mate 桌面 Brisk menu 组件的配置

Brisk Menu 让菜单在 mate 桌面上灵活布局, 那个会跳动的精灵还是挺不错的,适当处理后就得到了下面干净利索的桌面。 Ubuntu 安装时,在控制中心留有 plank reference 设置功能,让屏幕中底部的这些组件在不同位置摆放。当进行配置时…

算法分析与设计课后练习29

给定集合S{3, 7, 5, 9}, C 20, 近似参数 ε0.2, 写出 近似算法求解子集和问题的过程。

(备战2024)三天吃透Java面试八股文,面试通过率高达90%

什么样的求职者能够获得面试官的青睐?求职者需要准备哪些内容来面对形形色色的面试官?这两份资料是我在几十场面试中被面试官问到的问题,比其他复制粘贴的面试题强一百倍,堪称全网最强(我不太喜欢“全网最强”这样的字…

回顾丨2023 SpeechHome 第三届语音技术研讨会

下面是整体会议的内容回顾: 18日线上直播回顾 18日上午9:30,AISHELL & SpeechHome CEO卜辉宣布研讨会开始,并简要介绍本次研讨会的筹备情况以及报告内容。随后,CCF语音对话与听觉专委会副主任、清华大学教授郑方&#xff0c…

《PySpark大数据分析实战》-16.云服务模式Databricks介绍运行案例

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

node.js mongoose aggregate

目录 官方文档 简述 Aggregate的原型方法 aggregate进行操作 官方文档 Mongoose v8.0.3: Aggregate 简述 在 Mongoose 中,Aggregate 是用于执行 MongoDB 聚合操作的类。MongoDB 聚合操作是一种强大的数据处理工具,可以用于对集合中的文档进行变换和…

0基础学java-day21(网络编程)

一、网络的相关概念 1 网络通信 2 网络 3 ip 地址 4.ipv4 地址分类 5.域名 6 网络通信协议 7.网络通信协议 8.TCP 和 UDP 二、InetAddress 类 &Socket 1 相关方法 package com.hspedu.api;import java.net.InetAddress; import java.net.UnknownHostException;/*** …

系列二十八、如何在Oracle官网下载JDK的api文档

一、官网下载JDK的api文档 1.1、官网地址 https://www.oracle.com/java/technologies/javase-jdk21-doc-downloads.html 1.2、我分享的api.chm 链接:https://pan.baidu.com/s/1Bf55Fz-eMTErmQDtZZcewQ?pwdyyds 提取码:yyds 1.3、参考 https://ww…

STM32Fxx HAL库开发UART中断回调函数理解-中断回调函数流程-自己理解的

STM32HAL库中断服务函数调用过程有2种 第1种:可以直接在中断源对应的中断服务函数中编写我们想要的功能 具体是在void USART1_IRQHandler(void)函数写要执行的任务 正点原子是重新宏定义函数名,写法如下: 暂时忽略,…

代码随想录算法训练营第二十二天 | 搜索树添加、删除元素

目录 力扣题目 力扣题目记录 235. 二叉搜索树的最近公共祖先 总结 701.二叉搜索树中的插入操作 总结 450.删除二叉搜索树中的节点 普通二叉树的删除方式 总结 总结 力扣题目 用时:2h 1、235. 二叉搜索树的最近公共祖先 2、701.二叉搜索树中的插入操作 …

黑马头条--day06文章上下架--kafka消息队列

目录 一.自媒体文章上下架 二.kafka概述 1.消息中间件对比 2.kafka介绍 3.kafka安装配置 三.kafaka入门 (1)创建kafka-demo项目,导入依赖 (2)生产者发送消息 (3)消费者接收消息 总结…

【精简】mysql创建自定义函数 sql写法举例

一,举例的sql是查询 某个时间点某个币种的汇率 create function get_rate(idate date,CURRENCY varchar(32)) returns decimal(21,6) begin declare res decimal(21,6) default 1;selec rate into resfromt_exchangerate tewhere ratedate idateand CURRENCYID C…

听GPT 讲Rust源代码--src/tools(15)

File: rust/src/tools/rust-analyzer/crates/mbe/src/token_map.rs 在Rust源代码中,rust/src/tools/rust-analyzer/crates/mbe/src/token_map.rs文件的作用是实现了一个能够将输入的文本映射为标记的结构。具体来说,它定义和实现了几个结构体&#xff08…