Android 自定义 View 知识点
根据 Hencoder 提供的知识点,进行学习和总结。
三个要点:
- 布局
- 绘制
- 触摸反馈
绘制
- 自定义绘制:由自己实现绘制过程
- 常用绘制方法 onDraw(Canvas canvas)
- 绘制关键:
- canvas: 绘制工具
- 绘制类方法
- drawCircle(): 画圆
- drawRect():画方形
- drawPath():画路线
- drawText():画文本
- drawBitmap():画 bitmap
- 绘制辅助工具
- 绘制范围的裁切
- 绘制内容的几何变换
- 绘制类方法
- paint: 本意颜料,Android中指加强颜料,可设置各种风格,比如是空心还是实心或者是粗细等
- 绘制顺序:Android 按照顺序绘制的。除了 onDraw() 绘制主体部分,还有绘制前景( Forground)和背景( BackGround)
- canvas: 绘制工具
示例:
Paint 常见设置:
- mPaint.setColor(Color.RED):设置颜色
- mPaint.setStyle(Style.STROKE):设置绘制模式
- mPaint.setStrokeWidth(20):设置线条开关
- mPaint.setAntiAlias(true):设置抗锯齿
Cancan 绘制类方法
绘制颜色
* canvas.drawColor(Color.RED);
* canvas.drawColor(Color.parseColor("#00ff00"));
* canvas.drawColor(Color.parseColor("#8800ff00"));
* canvas.drawRGB(255, 0, 0);
* canvas.drawARGB(100, 255, 0, 0);
绘制圆
1. 实心圆:
mPaint = new Paint();
canvas.drawCircle(100, 100, 50, mPaint);
2. 空心圆
mPaint.setStyle(Style.STROKE);
canvas.drawCircle(200, 200, 50, mPaint);
3. 蓝色实心圆
mPaint.setStyle(Style.FILL);
mPaint.setColor(Color.BLUE);
canvas.drawCircle(200, 400, 50, mPaint);
4. 线宽为20的空心圆
mPaint.setStyle(Style.STROKE);
mPaint.setStrokeWidth(20);
canvas.drawCircle(400, 200, 50, mPaint);
绘制椭圆
canvas.drawOval(300, 100, 700, 300, mPaint);
绘制矩形
canvas.drawRect(250, 500, 700, 800, mPaint);
//
Rect tem1 = new Rect(250, 500, 700, 800);
canvas.drawRect(tem1, mPaint);
//
RectF tem2 = new RectF(250, 500, 700, 800);
canvas.drawRect(tem2, mPaint);
绘制圆角矩形
RectF t = new RectF(150, 200, 500, 350);
canvas.drawRoundRect(t, 50, 50, mPaint);
//
canvas.drawRoundRect(150, 200, 500, 350, 50, 50, mPaint);
绘制弧形或者扇形
drawArc(float left, float top, float right, float bottom, float startAngle,float sweepAngle, boolean useCenter, Paint paint)
* left,top,right,bottom:弧形所在的椭圆
* startAngle:弧形的起始角度(x 轴的正向,即正右的方向,0度的位置。顺时针为正角度,逆时针为负角度)
* sweepAngle:弧形划过的角度
* useCenter:表示十分连接圆心,连接圆心是扇形
,不连接圆心是弧形
绘制弧形
canvas.drawArc(200, 600, 800, 1000, 0, 47, false, mPaint);
绘制扇形
canvas.drawArc(200, 600, 800, 1000, 0, 135, true, mPaint);
示例:
mPaint.setAntiAlias(true);
mPaint.setStyle(Style.FILL);
canvas.drawArc(200, 100, 800, 500, -110, 100, true, mPaint); // 绘制扇形
canvas.drawArc(200, 100, 800, 500, 20, 140, false, mPaint); // 绘制弧形
mPaint.setStyle(Paint.Style.STROKE); // 画线模式
canvas.drawArc(200, 100, 800, 500, 180, 60, false, mPaint); // 绘制不封口的弧形
画自定义图形
drawPath(Path path, Paint paint): 通过描述路径的方式来绘制图形
- path: 描述路径的对象
- paint:
Path
- 直接描述路径
- addXxx() -- 添加子图形
- addCircle(float x, float y, float radius, Direction dir),该方法与 Canvas 的 drawCircle() 一样的,绘制圆形
- 描述:添加圆
- 参数 x 和参数 y :确定圆心
- 参数 radius: 确定圆的半径
- dir: 画圆路径的方向,枚举类型,CW(clockwise)顺时针/CCW(counter-clockwise)逆时针
- addArc():与 Canvas 的 drawArc() 一样,绘制弧形或者扇形
- addOval():与 Canvas 的 drawOval() 一样,绘制椭圆
- addRect():与 Canvas 的 drawRect() 一样,绘制矩形
- addRoundRect():与 Canvas 的 drawRoundRect() 一样的,绘制圆角矩形
- xxxTo()--画线(直线或者曲线)
- lineTo():画直线,从当前位置向目标位置画一条直线,参数为目标位置 x,y
- rLineTo(): 与 lineTo() 方法一样,参数是相对当前位置的相对坐标
- moveTo():移动到目标位置
- rMoveTo()
- cubicTo():画三次贝塞尔曲线
- rCubicTo()
- quadTo():画二次贝塞尔曲线
- rQuadTo()
- arcTo: 画弧形
- close():封闭当前子图形,与 lineTo(起始坐标)一样
- 辅助的设置或计算
- setFillType():设置填充方式
- EVEN_ODD:奇偶原则,交叉填充模式,对于平面的任意一点,向任意方向射出一条射线,这条射线和图形相交的次数(相交才算,相切不算)如果是奇数,则这个点被认为在图形内部,是要被涂色的区域;如果是偶数,则这个点被认为在图形外部,是不被涂色的区域。
- WINDING (默认值):非零环绕数原则,全填充模式
- INVERSE_EVEN_ODD
- INVERSE_WINDING
- setFillType():设置填充方式
- 直接描述路径
绘制 Bitmap
- drawBitmap()
绘制文字
- drawText()
Android 自定义 View 知识点的更多相关文章
- Android 自定义view(二) —— attr 使用
前言: attr 在前一篇文章<Android 自定义view -- attr理解>已经简单的进行了介绍和创建,那么这篇文章就来一步步说说attr的简单使用吧 自定义view简单实现步骤 ...
- Android自定义View(CustomCalendar-定制日历控件)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/54020386 本文出自:[openXu的博客] 目录: 1分析 2自定义属性 3onMeas ...
- Android自定义View(LineBreakLayout-自动换行的标签容器)
最近一段时间比较忙,都没有时间更新博客,今天公司的事情忙完得空,继续为我的自定义控件系列博客添砖加瓦.本篇博客讲解的是标签自动换行的布局容器,正好前一阵子有个项目中需要,想了想没什么难度就自己弄了 ...
- Android自定义View(三、深入解析控件测量onMeasure)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51490283 本文出自:[openXu的博客] 目录: onMeasure什么时候会被调用 ...
- Android自定义View(二、深入解析自定义属性)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51468648 本文出自:[openXu的博客] 目录: 为什么要自定义属性 怎样自定义属性 ...
- android 自定义view 前的基础知识
本篇文章是自己自学自定义view前的准备,具体参考资料来自 Android LayoutInflater原理分析,带你一步步深入了解View(一) Android视图绘制流程完全解析,带你一步步深入了 ...
- 【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介
前言 在前面的文章中,介绍了不少触摸相关的知识,但都是基于单点触控的,即一次只用一根手指.但是在实际使用App中,常常是多根手指同时操作,这就需要用到多点触控相关的知识了.多点触控是在Android2 ...
- Android自定义View 画弧形,文字,并增加动画效果
一个简单的Android自定义View的demo,画弧形,文字,开启一个多线程更新ui界面,在子线程更新ui是不允许的,但是View提供了方法,让我们来了解下吧. 1.封装一个抽象的View类 B ...
- (转)[原] Android 自定义View 密码框 例子
遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 ...
随机推荐
- Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6403033.html 在项目中的应用见: https://github.com/ygj0930/CoupleS ...
- “Info.plist” couldn’t be removed
Showing All Messages error: failed to remove /Users/Rubert/Library/Developer/Xcode/DerivedData/Proje ...
- C#和JAVA的RSA密钥、公钥转换
C#的秘钥跟JAVA的密钥区别 RSA对于程序本身是没有区别的,其格式都是相同的.对于不同的程序来说,存储使用的语法(包装的类)会有所不同. RSA语法和语法标准有很多,大的类型大概分为ASN.1 ...
- Redis从入门到精通:初级篇(转)
原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中 ...
- isset、empty、var==null、is_null、var===null详细理解
//isset: 判断变量是否被初始化 //它并不会判断变量是否为空,并且可能用来判断数组中元素是否被定义 //听说在数组用isset与array_key_exists高出4倍 $a = " ...
- JS修改当前控件样式&为控件追加事件
先搁这吧,今天太晚了,以后再加注释和修整吧.不幸搜到的朋友就别看了 <%@ Page Language="vb" AutoEventWireup="false&qu ...
- Win极速文件搜索Listary
对于开源的everything在win下搜索文件很高效了.不过在listary功能上更加的丰富..支持正则搜索 对比: 都是基于本地磁盘索引,进而实现快速搜素 00.有能力的还是购买pro,当然也有免 ...
- android软键盘弹出引起的各种不适终极解决方案
android软键盘弹出引起的各种不适终极解决方案 以下描述如何解决ListView高度小于0时出现的UI问题. 创建RelativeLayout的子类TxrjRelativeLayout publi ...
- ios中base64编码
参考文章:其中文章的:http://blog.csdn.net/ztp800201/article/details/9470065 下载包 其中 包括GTMBase包下载地址 http://pan.b ...
- ACM经验分享[转]
明确规则 规则:以最少的时间过题 (这意味着0ms与1000ms是一样的) 了解规则,善用规则 虽然这个题我不会但是AC是没有问题的 --ACRush 大力出奇迹 学会对拍数据,准备好对拍脚本:测试很 ...