自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint.

Canvas翻译成中文就是画布的意思,Canvas负责进行绘制各种各样的图形,它有如下的一些绘制图形方法:

  • drawArc 绘制弧

  • drawBitmap 绘制位图

  • drawCircle 绘制圆形

  • drawLine 绘制线

  • drawOval 绘制椭圆

  • drawPath 绘制路径

  • drawPoint 绘制一个点

  • drawPoints 绘制多个点

  • drawRect 绘制矩形

  • drawRoundRect 绘制圆角矩形

  • drawText 绘制字符串

  • drawTextOnPath 沿着路径绘制字符串

更多的绘制方法参考:https://developer.android.com/reference/android/graphics/Canvas.html.

Paint翻译成中文有油漆涂料的意思,Paint主要负责设置绘图的风格,包括画笔的颜色,粗细,填充风格等,它有如下的一些设置方法:

  • setARGB/setColor 设置颜色

  • setAlpha 设置透明度

  • setAntiAlias 设置是否抗锯齿

  • setShader 设置画笔的填充效果

  • setShadowLayer 设置阴影

  • setStyle 设置画笔风格

  • setStrokeWidth 设置空心边框的宽度

  • setTextSize 设置绘制文本时文字的大小

  • setStrokeCap(Paint.Cap.ROUND) 设置为圆角

更多的设置方法参考:https://developer.android.com/reference/android/graphics/Paint.html

绘制圆形:drawCircle(float cx, float cy, float radius, Paint paint)

cx: 圆心的x坐标 
cy: 圆心的y坐标 
radius: 圆的半径 
paint: 绘制风格

@Override
protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   Paint paint=new Paint();
   //去锯齿
   paint.setAntiAlias(true);
   //设置颜色
   paint.setColor(getResources().getColor(android.R.color.holo_blue_light));
   //绘制普通圆
   canvas.drawCircle(200,200,100,paint);
   //设置空心Style
   paint.setStyle(Paint.Style.STROKE);
   //设置空心边框的宽度
   paint.setStrokeWidth(20);
   //绘制空心圆
   canvas.drawCircle(200,500,90,paint);
}

绘制矩形:drawRect(float left, float top, float right, float bottom, Paint paint) / drawRect(RectF rect, Paint paint)

left: 矩形left的x坐标 
top: 矩形top的y坐标 
right: 矩形right的x坐标 
bottom: 矩形bottom的y坐标 
paint: 绘制风格

@Override
protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   Paint paint = new Paint();
   //去锯齿
   paint.setAntiAlias(true);
   //设置颜色
   paint.setColor(getResources().getColor(android.R.color.holo_blue_light));
   //绘制正方形
   canvas.drawRect(100, 100, 300, 300, paint);
   //上面代码等同于
   //RectF rel=new RectF(100,100,300,300);
   //canvas.drawRect(rel, paint);    //设置空心Style
   paint.setStyle(Paint.Style.STROKE);
   //设置空心边框的宽度
   paint.setStrokeWidth(20);
   //绘制空心矩形
   canvas.drawRect(100, 400, 600, 800, paint);
}

绘制圆角矩形:drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint) / drawRoundRect(RectF rect, float rx, float ry, Paint paint)

left: 图形left的x坐标 
top: 图形top的y坐标 
right: 图形right的x坐标 
bottom: 图形bottom的y坐标 
rx: x方向的圆角半径 
ry: y方向的圆角半径 
paint > 绘制风格

@Override
protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   Paint paint = new Paint();
   //去锯齿
   paint.setAntiAlias(true);
   //设置颜色
   paint.setColor(getResources().getColor(android.R.color.holo_blue_light));
   //绘制圆角矩形
   canvas.drawRoundRect(100, 100, 300, 300, 30, 30, paint);
   //上面代码等同于
   //RectF rel=new RectF(100,100,300,300);
   //canvas.drawRoundRect(rel,30,30,paint);
   //设置空心Style
   paint.setStyle(Paint.Style.STROKE);
   //设置空心边框的宽度
   paint.setStrokeWidth(20);
   //绘制空心圆角矩形
   canvas.drawRoundRect(100, 400, 600, 800, 30, 30, paint);
}

绘制椭圆:drawOval(float left, float top, float right, float bottom, Paint paint)

left: 图形left的x坐标 
top: 图形top的y坐标 
right: 图形right的x坐标 
bottom: 图形bottom的y坐标 
paint: 绘制风格

@Override
protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   Paint paint = new Paint();
   //去锯齿
   paint.setAntiAlias(true);
   //设置颜色
   paint.setColor(getResources().getColor(android.R.color.holo_orange_dark));
   //绘制椭圆
   canvas.drawOval(100, 100, 500, 300, paint);
   //设置空心Style
   paint.setStyle(Paint.Style.STROKE);
   //设置空心边框的宽度
   paint.setStrokeWidth(20);
   //绘制空心椭圆
   canvas.drawOval(100, 400, 600, 800, paint);
}

绘制弧:drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

oval: 指定圆弧的外轮廓矩形区域 
startAngle: 圆弧起始角度,单位为度 
sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度 
useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形 
paint: 绘制风格

@Override
protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   Paint paint = new Paint();
   //去锯齿
   paint.setAntiAlias(true);
   //设置颜色
   paint.setColor(getResources().getColor(android.R.color.holo_orange_dark));
   RectF rel = new RectF(100, 100, 300, 300); 
// 设置为圆角   paint .setStrokeCap(Paint.Cap.ROUND);
     //实心圆弧
   canvas.drawArc(rel, 0, 270, false, paint);
   //实心圆弧 将圆心包含在内
   RectF rel2 = new RectF(100, 400, 300, 600);
   canvas.drawArc(rel2, 0, 270, true, paint);
   //设置空心Style
   paint.setStyle(Paint.Style.STROKE);
   paint.setStrokeWidth(20);
   RectF rel3 = new RectF(100, 700, 300, 900);
   canvas.drawArc(rel3, 0, 270, false, paint);
   RectF rel4 = new RectF(100, 1000, 300, 1200);
   canvas.drawArc(rel4, 0, 270, true, paint);
}

绘制文字:drawText(String text, float x, float y, Paint paint)

text: 文本 
x: 文本origin的x坐标 
y: 文本baseline的y坐标 
paint: 绘制风格

@Override
protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   Paint paint = new Paint();
   //去锯齿
   paint.setAntiAlias(true);
   //设置颜色
   paint.setColor(getResources().getColor(android.R.color.holo_orange_dark));
   paint.setTextSize(100);
   //绘制文本
   canvas.drawText("jEh", 80, 150, paint);
}
 

Android为TV端助力 Canvas 和 Paint用法的更多相关文章

  1. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...

  2. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)

    LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ...

  3. Android为TV端助力:自定义view之太阳

    先看效果图 package com.hhzt.iptv.lvb_w8.view; import android.content.Context;import android.graphics.Canv ...

  4. Android为TV端助力 转载:android自定义view实战(温度控制表)!

    效果图 package cn.ljuns.temperature.view; import com.example.mvp.R; import android.content.Context;impo ...

  5. Android为TV端助力 转载:RecyclerView分页加载

    package com.android.ryane.pulltoloaddata_recyclerview; import android.os.Handler;import android.os.L ...

  6. Android为TV端助力(转载)

    作者地址http://www.jianshu.com/u/63915ef020e2 针对Android Tv的自定义RecyclerView 作者 wenju_song 关注 2016.12.09 1 ...

  7. Android为TV端助力 不需要Socket的跨进程推送消息AIDL!

    上篇介绍了跨进程实时通讯http://www.cnblogs.com/xiaoxiaing/p/5818161.html 但是他有个缺点就是服务端无法推送消息给客户端,今天这篇文章主要说的就是服务器推 ...

  8. Android为TV端助力之Webview与JS双向交互

    package com.hhzt.iptv.adservice; import android.app.Activity;import android.graphics.Bitmap;import a ...

  9. Android为TV端助力之WebView开发踩坑一

    在Android清单配置文件里面 自定义application时,在4.4系统上面不能加上一个属性,见下图 否则界面将不会显示任何数据,在更高或者更低的系统上面没有测试!

随机推荐

  1. MySQL(3)---MySQL优化

    MySQL优化 一.单表.双表.三表优化 1.单表    首先结论就是,range类型查询字段后面的索引全都无效 (1)建表 create table if not exists article( i ...

  2. Spring Boot Jersey使用示例

    前言 本文将学习如何使用Spring Boot和Jersey框架,去配置和创建JAX-RS 2.0 REST API接口: 这个示例应用使用的是Jersey的Servlet容器去部署REST API接 ...

  3. [Be a Coding Plasterer] Components 1:get Basic Things

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. Written In The Font I a ...

  4. 基于Github&Hexo的个人博客搭建过程

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  5. idea启动多个tomcat失败

    Intellij idea中,为在本地调试两个系统之间的调用,配置两个本地tomcat server,设置不同的端口号,如8081和8082,Deploy中加入两个系统各自的Artifact xxx: ...

  6. Spring Boot中使用断路器

    断路器本身是电路上的一种过载保护装置,当线路中有电器发生短路时,它能够及时的切断故障电路以防止严重后果发生.通过服务熔断(也可以称为断路).降级.限流(隔离).异步RPC等手段控制依赖服务的延迟与失败 ...

  7. .NET线程池最大线程数的限制-记一次IIS并发瓶颈

    .NET ThreadPool 最大线程数的限制 IIS并发瓶颈,有几个地方,IIS线程池的最大队列数,工作进程数,最大并发数.这些这里就不展开.主要是最近因为过度使用Task 导致的线程数占用过多, ...

  8. MySQL中字段字符集不同导致索引不能命中

    今天写了一个sql,其中涉及的表中的数据量都差不多为50w左右,查询发现用了8s.这个只是测试服上数据,放到正式服上,肯定一运行就挂了. SELECT Orders. NO, GuidNo, Orde ...

  9. Go基础系列:channel入门

    Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 channel基础 chann ...

  10. HTML+CSS基础(1)-理解什么是HTML和CSS

    什么是HTML w3c的解释如下: HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种 ...