自定义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: 绘制风格

@Overrideprotected 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);    //设置空心Stylepaint.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: 绘制风格

@Overrideprotected 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);//设置空心Stylepaint.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 > 绘制风格

@Overrideprotected 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);//设置空心Stylepaint.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: 绘制风格

@Overrideprotected 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);    //设置空心Stylepaint.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: 绘制风格

@Overrideprotected 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);    //设置空心Stylepaint.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: 绘制风格

@Overrideprotected 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);
}
 

转载于:https://www.cnblogs.com/xiaoxiaing/p/5842762.html

Android为TV端助力 Canvas 和 Paint用法相关推荐

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

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

  2. Android为TV端助力 最详细的动画大全,包括如何在代码和在XML中使用

    一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ...

  3. Android为TV端助力 浅谈Aidl 通讯机制

    服务端: 首先是编写一个aidl文件,注意AIDL只支持方法,不能定义静态成员,并且方法也不能有类似public等的修饰符:AIDL运行方法有任何类型的参数和返回值,在java的类型中,以下的类型使用 ...

  4. Android为TV端助力之热修复原理

    通过源码我们知道Android加载类是通过ClassLoad类里面的findClass先去查找的,如下图所示 通过看源码我们知道,ClassLoad是一个抽象类,它本身并没有实现findclass() ...

  5. Android为TV端助力context转换类型

    转载于:https://www.cnblogs.com/xiaoxiaing/p/7246761.html

  6. Android为TV端助力 同时setTag两次,保存多种值

    示例代码: view.setTag(R.string.action_settings,hodler.content); 接收两个值,一个是key值,必须是唯一值,而且要写在values/ids.xml ...

  7. Android为TV端助力 转载:Java 泛型

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest {2 3 public static void main(Strin ...

  8. Android为TV端助力 post带数据请求方式,传递的数据格式包括json和map

    如下: public static String httpPost(String url, String json) { try { URL u = new URL(url); HttpURLConn ...

  9. Android 手机TV端屏幕共享助手

    最近一段时间辞职在家,无聊写了个小程序也算是个demo.这里和大家分享一下,还望各位同仁多多指点.主要功能是实现同局域网下,手机端和TV端连接并分享手机屏幕画面(手机端只支持Android 5.0级以 ...

  10. Android -- 图片画画板(canvas、paint、bitmap)

    布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:too ...

最新文章

  1. 打印二叉树和为某一值的路径
  2. 深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)
  3. NYOJ -804 Gift (二分)
  4. 【小白学习C++ 教程】四、C++逻辑运算符、While循环和For 循环
  5. VTK:vtkBorderWidget用法实战
  6. 英特尔核芯显卡控制面板没有了_「有趣」第41期:被英特尔取消发售的CPU长啥样?...
  7. Luogu2114 [NOI2014]起床困难综合症 【位运算】
  8. Html5 各属性详解
  9. mysql test数据库_mysql数据库test
  10. 电商运营、美工必备导航类网站,有效提高工作效率
  11. 关于软件测试的5个误传
  12. 自建gitHub的webhook消息通知设计思路及成功验证结果
  13. Spring Cloud Sleuth链路跟踪之使用RabbitMQ异步收集链路跟踪信息(学习总结)
  14. 大土狗书屋好书推荐--《史蒂夫·乔布斯传》
  15. 删除重复节点(细节每太明白)
  16. 软件工程——背单词软件对比
  17. android 如何进入安全模式,手机怎么进入安全模式
  18. linaro 网站资源
  19. seed lab 2020 packet sniffing and spoofing lab
  20. 电脑手机硬件测试软件,手机硬件检测:Z-DeviceTest

热门文章

  1. [洛谷P3613]睡觉困难综合征
  2. iOS黑魔法 - Method Swizzling
  3. 04.spring boot配置文件--yml
  4. 【笔记】android 系统常用user id列表
  5. View#post与Handler#post的区别,以及导致的内存泄漏分析
  6. BZOJ1176[Balkan2007] Mokia
  7. webpack5+vue3搭建h5项目模板-(一)-基础配置
  8. 同时安装python2和python3
  9. es6的模块化export和import
  10. 使用Java打开外部程序