在Java中,利用过双缓冲技术,先将画笔画在内存上,再转化为图片,调出来。

当画的东西过多造成处理不过来时,双缓冲技术将防止闪屏。

在Paint方法下,我们这样写:

    BufferedImage tmp = new BufferedImage(1200, 900, BufferedImage.TYPE_INT_ARGB);
Graphics g2 = tmp.createGraphics();

利用g2来绘图,然后再将tmp画在g上面

    g.drawImage(tmp, 0, 0, this);

在安卓中,我们也利用类似的思维。

其中Bitmap类似于BufferedImage,Canvas类似于Graphics,而paint则类似于画笔,原来是在Graphics下直接设置颜色,而现在则需要在paint下设置颜色,并在Canvas绘制传参时加入paint。

public boolean onTouch(View v, MotionEvent event) {
//获取当前时间的动作
if(flag == 0){
bitmap = Bitmap.createBitmap(iv.getWidth(),iv.getHeight(), Bitmap.Config.ARGB_8888);
flag = 1;
}
canvas = new Canvas(bitmap);
int action = event.getAction();
switch(action){
case MotionEvent.ACTION_DOWN:{
a = event.getX();
b = event.getY();
}break;
case MotionEvent.ACTION_UP:{
c = event.getX();
d = event.getY();
canvas.drawLine(a,b,c,d, paint);
}break;
} canvas.drawBitmap(bitmap, 0,0, paint);
iv.setImageBitmap(bitmap);
return true;
}

其中flag用来判断是否已经创立画布。

Android学习记录:Paint,Canvas和Bitmap的更多相关文章

  1. Android学习记录(3)—Android中ContentProvider的基本原理学习总结

    一.ContentProvider简介        当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据 ...

  2. Android学习记录(10)—Android之图片颜色处理

    你想做到跟美图秀秀一样可以处理自己的照片,美化自己的照片吗?其实你也可以自己做一个这样的软件,废话不多说了,直接上图,上代码了! 效果图如下: 没处理前: 处理之后: MainActivity.jav ...

  3. mono for android 学习记录

    C#开发Android应用实战(全 扫描 中文版) 学习记录: 拖完控件后,不要急着按F5,需要重新生成,才能自动修改 Resource.Designer.cs 文件 1. Activity 是基于a ...

  4. android 学习记录-----------android 活动 意图 碎片

    将此篇博客作为记录android项目开发过程中的学习记录

  5. 中级实训Android学习记录——Toast、AlertDialog、ProgressBar

    学习记录 2020/11/22 Toast Toast Toast是一个消息提示组件 我们可以设置其显示的位置 自定义其显示的内容 对Toast的简单封装可以达到不同的目的 Toast的默认用法 To ...

  6. Android学习记录(三)——安装SQLite

    这次学习安装SQLite. 一.SQLite简介 重要特性:零配置,即不需要复杂的配置即可使用 详细:https://www.runoob.com/sqlite/sqlite-intro.html 二 ...

  7. Android学习记录(9)—Android之Matrix的用法

    Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 首先介绍一下矩阵运算.加法和减法就不用说了,对应位相加就好.图像处理,主要用到的是乘法 .下面 ...

  8. android.graphics(1) - Paint, Canvas, drawLine, drawPoint, drawRect, drawRoundRect, drawCircle, drawOval, drawArc

    一.Paint与Canvas 像我们平时画图一样,需要两个工具,纸和笔.Paint就是相当于笔,而Canvas就是纸,这里叫画布. 所以,凡有跟要要画的东西的设置相关的,比如大小,粗细,画笔颜色,透明 ...

  9. 【Android】Android 学习记录贴

    官网 教程学习笔记 Genymotion 安卓虚拟器太慢,用Genymotion(装载eclipse的插件) 利用Genymotion运行Android应用程序 1.首先,点击 来启动或者创建您要使用 ...

随机推荐

  1. TeamCity : Build 失败条件

    允许用户配置 Build 失败的条件是很有用的功能,它是我们配置复杂 Build 流程的基础.TeamCity 为用户自定义 Build 失败条件提供了很好的支持.这些条件大体上可以分为两类,分别是: ...

  2. ASP.NET Core 源码学习之 Logging[4]:FileProvider

    前面几章介绍了 ASP.NET Core Logging 系统的配置和使用,而对于 Provider ,微软也提供了 Console, Debug, EventSource, TraceSource ...

  3. python时间序列分析

              题记:毕业一年多天天coding,好久没写paper了.在这动荡的日子里,也希望写点东西让自己静一静.恰好前段时间用python做了一点时间序列方面的东西,有一丁点心得体会想和大家 ...

  4. Xen创建新虚拟机

    一.添加一个ISO存储: 右键选择"New Storage Repository-" 选择"ISO Library"中的"Windows File S ...

  5. ASP.NET Core身份验证服务框架IdentityServer4-整体介绍

    一.整体情况 现代应用程序看起来更像这个: 最常见的相互作用: 浏览器与Web应用程序的通信 Browser -> Web App Web应用程序与Web API通信 基于浏览器的应用程序与We ...

  6. 关于write()和fsync()

    --关于write()和fsync()   ----------------------------转载 write ssize_t write(int fd, const void *buf, si ...

  7. Connect By、Level、Start With的使用

    --Connect By.Level.Start With的使用 --------------------------------------2013/11/20 Syntax 1 CONNECT B ...

  8. IPV6与IPV4的区别

    IPv4协议的地址长度是32位,IPv6协议的地址长度是128位. 1.表示方式 IPv4地址表示为点分十进制格式,32位的地址分成4个8位分组,每个8位以十进制数显式,中间用点号分隔. 而IPv6采 ...

  9. Eclipse 安装插件(aptana、svn 、git、Java EE、JSHint)

    转发9 1.安装 aptana 插件:  * 依次点击:Help -> Install New Software... -> Add  * 输入:http://download.aptan ...

  10. 有了 indexOf,为什么 ECMAScript 7 还添加了 Array.prototype.include

    ECMAScript 7 中新增了用于检测数组中是否包含某个元素 Array.prototype.includes() API,想到了 Array 其实有很多相关 API 可以检测到是否包含某个元素, ...