自定义绘制View
Paint(画笔)

Canvas(画布)

- rotate(float degrees,float px,float py)//对canvas执行旋转变换
scale(float sx,float sy)//对canvas执行缩放skew(float sx,float sy)//对canvas执行倾斜变换translate(float dx,float dy)//移动canvas,向右dx,向下dy- //
- setBitmap(Bitmap bitmap)
Path(绘画路径)
//PathmoveTo(float x,float y)//Set the beginning of the next contour to the point (x,y).lineTo(float x,float y)//Add a line from the last point to the specified point (x,y).//canvasdrawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)//hOffset水平偏移 vOffset垂直偏移
- Paint paint =newPaint();
paint.setPathEffect(PathEffect effect);
实例:采用双缓冲实现画图板
publicclassDrawView extends View{// 定义记录前一个拖动事件发生点的坐标float preX;float preY;privatePath path;publicPaint paint = null;// 定义一个内存中的图片,该图片将作为缓冲区Bitmap cacheBitmap = null;// 定义cacheBitmap上的Canvas对象Canvas cacheCanvas = null;publicDrawView(Context context,int width ,int height){super(context);// 创建一个与该View相同大小的缓存区cacheBitmap =Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);cacheCanvas =newCanvas();path =newPath();// 设置cacheCanvas将会绘制到内存中的cacheBitmap上cacheCanvas.setBitmap(cacheBitmap);// 设置画笔的颜色paint =newPaint(Paint.DITHER_FLAG);paint.setColor(Color.RED);// 设置画笔风格paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(1);// 反锯齿paint.setAntiAlias(true);paint.setDither(true);}@Overridepublic boolean onTouchEvent(MotionEvent event){// 获取拖动事件的发生位置float x = event.getX();float y = event.getY();switch(event.getAction()){caseMotionEvent.ACTION_DOWN:// 从前一个点绘制到当前点之后,把当前点定义成下次绘制的前一个点path.moveTo(x, y);preX = x;preY = y;break;caseMotionEvent.ACTION_MOVE:// 从前一个点绘制到当前点之后,把当前点定义成下次绘制的前一个点path.quadTo(preX, preY, x, y);preX = x;preY = y;break;caseMotionEvent.ACTION_UP:cacheCanvas.drawPath(path, paint);// ①path.reset();break;}invalidate();// 返回true表明处理方法已经处理该事件returntrue;}@Overridepublicvoid onDraw(Canvas canvas){Paint bmpPaint =newPaint();// 将cacheBitmap绘制到该View组件上canvas.drawBitmap(cacheBitmap,0,0, bmpPaint);// ②// 沿着path绘制canvas.drawPath(path, paint);}}
自定义绘制View的更多相关文章
- Flutter 自定义绘制 View
在 Flutter 中自定义 View 有两种方式: 组合已有控件 自定义绘制 如何自定义绘制 有两个类做这件事情: CustomPaint :会在绘制阶段提供一个 Canvas 画布 CustomP ...
- 【转】Android绘制View的过程研究——计算View的大小
Android绘制View的过程研究——计算View的大小 转自:http://liujianqiao398.blog.163.com/blog/static/18182725720121023218 ...
- Android 自定义View修炼-Android实现圆形、圆角和椭圆自定义图片View(使用BitmapShader图形渲染方法)
一.概述 Android实现圆角矩形,圆形或者椭圆等图形,一般主要是个自定义View加上使用Xfermode实现的.实现圆角图片的方法其实不少,常见的就是利用Xfermode,Shader.本文直接继 ...
- Android XML中引用自定义内部类view的四个why
今天碰到了在XML中应用以内部类形式定义的自定义view,结果遇到了一些坑.虽然通过看了一些前辈写的文章解决了这个问题,但是我看到的几篇都没有完整说清楚why,于是决定做这个总结. 使用自定义内部类v ...
- android绘制view的过程
1 android绘制view的过程简单描述 简单描述可以解释为:计算大小(measure),布局坐标计算(layout),绘制到屏幕(draw): 下面看看每一步的动作到底是 ...
- 自定义View_2_关于自定义组合View
自定义View(2) Android当中给我们提供了丰富的UI控件,当然也许满足不了我们的需求,我们就必须学会自定义自己的View,我们怎么算是自定义自己的view呢! 我们会根据原来有的View对V ...
- ASP.NET MVC学习笔记-----使用自定义的View Engine
我们都知道在ASP.NET MVC中自带了Razor View Engine,Razor十分的强大,可以满足我们绝大部分的需要.但是ASP.NET MVC的高度可扩展性,使我们可以使用自定义的View ...
- Unity 扩展属性自定义绘制
这么晚了准备睡觉的时候,去学习了一会. 发现一个标题好奇的点进去. 居然是自定义绘制属性. 在前几天这个问题把我难住了,没想到几分钟就能解决的问题. 我花了半天时间使用反射去解决... 如果我们想 ...
- android 开发 View _16 自定义计步器View、自定义柱状图View
/** *@content:实现计步的环形View *@time:2018-7-30 *@build: */ public class CountStepsAnnularView extends Vi ...
随机推荐
- 微信返回上一页,页面中的AJAX的请求,对Get请求无效的解决办法
问题产生原因 最近在做一个微信的项目时,遇到一种很常见的情况,需求是这样的,当用户进入到"我的个人中心"的时候,会有一个点击跳转填写认证资料的按钮,点击此按钮后,会跳转 ...
- 模拟vector
实现了vector的模板,insert, erase, push_back, iterator #include<iostream> #include<string.h> #i ...
- 你好,C++(39)6.4.4 依葫芦画瓢:用C++表达设计结果(下)
6.4.4 依葫芦画瓢:用C++表达设计结果 完成上面的分析与设计之后,小陈感觉已经成竹在胸胜利在望了.他知道,只要完成了程序中的类以及类之间关系的分析和设计,整个程序就相当于已经完成了一大半.接下 ...
- CSU 1616: Heaps(区间DP)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1616 1616: Heaps Time Limit: 2 Sec Memory Lim ...
- iphone立体矢量图标_学习教程
- 完全用 GNU/Linux 工作(转)
转自:http://www.chinaunix.net/old_jh/4/16102.html 看到一半,实在太长,但已觉得很好,转来分享一下. 完全用 GNU/Linux 工作 - 摈弃 Windo ...
- Win7下安装Ubuntu双系统常见问题
[转自己以前的文章] 导航: ● win7下硬盘安装ubuntu常见问题 ● win7下u盘安装ubuntu常见问题 吐槽: Ubuntu的安装花了我将近15个小时,网上常见的.不常见的问题基本我都 ...
- Spring+SpringMVC+Mybatis+MAVEN+Eclipse+项目完整环境搭建
1.新建一个Maven项目,创建父项目. 2.创建子项目模块 3.创建javaWeb项目 4.创建后的项目目录结构 5.Maven文件配置 parent父项目pom.xml文件配置 <?xml ...
- (推荐)jquery.pagination.js分页
序言 本来想自己对这个分页使用做一些总结的,但发现大神们已经总结的很好了.所以给推荐一下. 转自:http://www.cnblogs.com/knowledgesea/archive/2013/01 ...
- iOS证书快要过期怎么办?
说法一: 1.先revoke你的Certificate,重新生成一个新的. 2.Edit一下你的证书,选择新的Certificate. 3.下载覆盖之前的证书,就可以了. 这个帐号发布的产品不会受到影 ...