Android Canvas和Paint基本使用

 

  这篇文章主要介绍下画笔Paint和画布Canvas的基本使用

    1.Paint

   创建对象Paint mPaint = new Paint();

   常用的基本方法有 :

                    mPaint.setAntiAlias(true); (抗锯齿)

          mPaint.setColor(Color.WHITE);(画笔颜色)

          mPaint.setARGB(int a, int r, int g, int b);取值都是0~255

          mPaint.setAlpha (int a);设置画笔透明度,取值0~255

          mPaint.setDither(boolean dither):防抖动,这个属性的需求场景主要出现在绘制渐变色彩或含渐变的图片时,Android对不含alpha通道的图片会进行一个转化

          mPaint.setStyle(画笔样式)

          mPaint.setStyle(Paint.Style style):设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE

         mPaint.setStrokeCap(设置画笔帽)

         mPaint.setStrokeCap(Paint.Cap cap):当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式;Cap.ROUND,或方形样式Cap.SQUARE

          mPaint.setStrokeWidth(float width):当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度

          mPaint.setXfermode(Xfermode xfermode):设置图形重叠时的处理方式,如合并,取交集或并集

          mPaint.setShadowLayer(float radius ,float dx,float dy,int color):在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影                                                                                                        的颜色

   2. Canvas基本用法

    2.1 基本方法有

      canvas.drawArc ();画扇形

      canvas.drawCircle();画圆

      canvas.drawOval();画椭圆

      canvas.drawLine();画线

      canvas.drawPoint();画点

      canvas.drawRect();画矩形

         canvas.drawRoundRect();画圆角矩形

      canvas.drawVertices();画顶点

           canvas.drawPath();画路径

canvas.drawBitmap();画位图

         canvas.drawText() ;画文字

    2.2

      2.2.1 画扇形

           private void drawArc(Canvas canvas) {

              RectF rectF = new RectF(0, 0, 100, 100);
      paint.setColor(Color.parseColor("#33333333"));
      //oval :指定圆弧的外轮廓矩形区域。
      //startAngle: 圆弧起始角度,单位为度。从180°为起始点
      //sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度。
      //useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。如果false会将圆弧的两端用直线连接
      //paint: 绘制圆弧的画板属性,如颜色,是否填充等
      canvas.drawRect(rectF,paint);
      paint.setColor(Color.parseColor("#ff0000"));
      canvas.drawArc(rectF,0,90,
true,paint);
    }

       运行效果如下:
        

      
2.2.2 画圆
         代码如下
        
private void drawCircle(Canvas canvas) {
                 paint.setColor(Color.GREEN);
         //cx : 圆心在x轴上的坐标
         //cy : 圆心的y轴上的坐标
         //radius: 半径
         canvas.drawCircle(50,50,50,paint);
       }
        效果如下:
        

      2.2.3 画椭圆
         代码如下:
         
private void drawOval(Canvas canvas) {
                paint.setColor(Color.BLACK);
        RectF rectF = new RectF(0, 0, 150, 100);
        //oval : 外接矩形
        canvas.drawOval(rectF,paint);
      }
        效果如下:

        

        2.2.4   画线

          代码如下:

          private void drawLine(Canvas canvas) {

                canvas.drawLine(0,0,100,100,paint);
        canvas.translate(0,110);         //画一组线
        float[] pts={0,0,100,0,
   100,0,100,100,
   100,100,0,100,
1,100,1,0};
        //线宽
        paint.setStrokeWidth((float) 2.0);
        //pts : 绘制直线的端点数组,每条直线占用4个数据。
        //canvas.drawLines(pts, paint);
        //offset : 指定跳过的数据个数
        //count : 指定取出数据的个数
        canvas.drawLines(pts,4,
12,paint);
      }

          效果如下:
          
     2.2.5 画点

          代码如下:

           private void drawPoint(Canvas canvas) {

                paint.setStrokeWidth((float) 5.0);
        canvas.drawPoint(50,50,paint);
        canvas.translate(0,100);         float[] pst = {20,20,40,40,60,60};
        paint.setColor(Color.RED);
        canvas.drawPoints(pst,paint);
        canvas.translate(0,100);
        //跳过前两个元素
        canvas.drawPoints(pst,2,
4,paint);
          }
          效果如下: 
          

      2.2.6  画矩形

         代码如下:

        private void drawRect(Canvas canvas) {
        canvas.drawRect(0,0,100,100,paint);
        canvas.translate(0,110);         canvas.drawRect(new RectF(0,0,100,100),paint);
        canvas.translate(0,110);         canvas.drawRect(new Rect(0,0,100,100),paint);
      }
        效果如下:
        

      2.2.7 画圆角矩形

        代码如下:

        private void drawRoundRect(Canvas canvas) {

                paint.setColor(Color.BLUE);
        //rect : 要绘制的矩形
        //rx : x轴方向的弧度
        //ry : y轴方向上的弧度
        canvas.drawRoundRect(new RectF(0,0,100,100),10,10,paint);
   }
        效果如下:
        

    2.2.8 画路径
        代码如下:
        
private void drawPath(Canvas canvas) {
                Path path = new Path();         //Path对象
        path.moveTo(10, 50); //起始点
        path.lineTo(50, 50); //连线到下一点
         path.lineTo(10, 150); //连线到下一点
         path.lineTo(50, 100); //连线到下一点
        path.lineTo(50, 100); //连线到下一点
        paint.setColor(Color.RED);//红色
        canvas.drawPath(path, paint); //绘制任意多边形
      }
        效果如下:
        

    2.2.9 画图片
        代码如下:
        
private void drawBitmap(Canvas canvas) {
                Bitmap bitmap=((BitmapDrawable)getResources().getDrawable(R.mipmap.ic_launcher)).getBitmap();
        //left : 位图距左边的偏移量
        //top : 位图距顶部的偏移量
        Rect rect = new Rect(0, 0, 100, 100);
        RectF rectf = new RectF(0, 0, 50, 50);         //src : 是对图片进行裁截,若是空null则显示整个图片
        //dst :是图片在Canvas画布中显示的区域,大于src则把src的裁截区放大, 小于src则把src的裁截区缩小。
        canvas.drawBitmap(bitmap,rect,rectf,paint);
      }
         效果如下:
         

     2.2.10 画文字
         代码如下
        
 private void drawText(Canvas canvas) {
                paint.setTextSize(30);
        Paint.FontMetrics fm = paint.getFontMetrics();
        //x : 绘制时x轴偏移量
        //y :绘制时y轴偏移量
        canvas.drawText("Android",0,(fm.bottom - fm.top) / 2,paint);//这里要计算文字绘制的起点,因为文字是按baseLine来绘制的。
      }
        效果如下:
        
        最后我们看一个例子 实现下面这种效果:
        
        首先我们定义一个view 实现onDraw()方法 代码如下:
        

          我们通过不断改变mCurPercent之后调用postInvalidate()方法进行实时绘制,就能看到进度动画了。其实Canvas功能还能很强大的,大家可以不断的学习。

          这篇文章不错 推荐下 http://blog.csdn.net/wangrain1/article/details/73287908

 

转Android Canvas和Paint基本使用的更多相关文章

  1. android Canvas 和 Paint用法

    自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...

  2. Android Canvas和Paint基本使用

    这篇文章主要介绍下画笔Paint和画布Canvas的基本使用  1.Paint 创建对象Paint mPaint = new Paint(); 常用的基本方法有 :                mP ...

  3. Android使用学习之画图(Canvas,Paint)与手势感应及其应用(乒乓球小游戏)

    作为一个没有学习Android的菜鸟,近期一直在工作之外努力地学习的Android的使用. 这周看了下Android的画图.主要是Canvas,Paint等,感觉须要实践下.下午正好有空,就想整一个乒 ...

  4. Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解

    上篇文章介绍了自定义View的创建流程,从宏观上给出了一个自定义View的创建步骤,本篇是上一篇文章的延续,介绍了自定义View中两个必不可少的工具Canvas和Paint,从细节上更进一步的讲解自定 ...

  5. Android为TV端助力 Canvas 和 Paint用法

    自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...

  6. 【Android】21.2 2D图形图像处理(Canvas和Paint)

    分类:C#.Android.VS2015: 创建日期:2016-03-19 一.Canvas对象简介 画布(Canvas对象)是与System.Drawing或iOS核心图形等传统框架非常类似的另一种 ...

  7. Android中使用Canvas和Paint绘制一个安卓机器人

    场景 在Android中画笔使用Paint类,画布使用Canvas类来表示. 绘图的基本步骤 首先编写一个继承自View的自定义View类,然后重写其onDraw方法,最后把自定义的view添加到ac ...

  8. android通过Canvas和Paint截取无锯齿圆形图片

    一个通过Canvas和Paint截取无锯齿圆形图片. /** * 根据原图和变长绘制圆形图片 * * @param source * @param min * @return */ public st ...

  9. Android绘图基础Paint和Canvas介绍-android学习之旅(六十一)

    canvas介绍 Paint类介绍 代码示例 效果图

随机推荐

  1. 『学了就忘』Linux基础命令 — 33、管道符

    目录 1.管道符介绍 2.管道符应用 (1)例子1: (2)例子2: (3)例子3: 1.管道符介绍 管道符|,也是Shell命令. 管道符的作用是链接多个命令,把命令1的结果作为命令2的操作对象. ...

  2. IDEA中Update resources和Update classes and resources、Redeploy、Restart server的区别

    选项 描述 update resources 所有更改的资源都会更新(HTML,JSP,JavaScript,CSS和图像文件) update classes and resources 更改的资源将 ...

  3. 1. 处理静态资源 2. controller如何接受请求得参数 3. 如何把controller得数据保存到view. 4. 在controller如何完成重定向到指定路径 5. controller返回json数据

    1. 1. 处理静态资源2. controller如何接受请求得参数3. 如何把controller得数据保存到view.4. 在controller如何完成重定向到指定路径5. controller ...

  4. GoLang设计模式15 - 策略模式

    策略模式是一种行为型设计模式.通过策略模式,可以在运行时修改一个对象的行为. 接下来仍然是通过例子来了解策略模式.比如说内存缓存,这是我们在开发中经常使用的东西,大家应该都有一定的了解,接下来就用内存 ...

  5. 菜鸡的Java笔记 开发支持类库

    开发支持类库 SupportClassLibrary        观察者设计模式的支持类库                    content (内容)        什么是观察者设计模式呢?   ...

  6. 基于linux与线程池实现文件管理

    项目要求 1.基本 用线程池实现一个大文件夹的拷贝,大文件夹嵌套很多小文件:实现复制到指定文件夹的全部文件夹. 2.扩充功能 显示进度条:拷贝耗时统计:类似linux的tree,不能直接用system ...

  7. [hdu6990]Directed Minimum Spanning Tree

    模板题:在有向图中,对每一个点求以其为根的最小(外向)生成树 (当图是强连通时)可以使用朱刘算法,算法过程如下: 1.对每一个节点,选择指向该点的边权最小的边,即得到一张子图 2.任选这张子图的一个简 ...

  8. [JS高程]JavaScript中的RegExp对象

    目录 1. RegExp 1.1 表示格式: 1.2 匹配模式: 1.3 RegExp 实例属性 1.4 RegExp 实例方法 1.4.1 exec() 1.4.1.1 基本用法 1.4.1.2 e ...

  9. 力扣 - 剑指 Offer 27. 二叉树的镜像

    题目 剑指 Offer 27. 二叉树的镜像 思路1(递归) 我们可以使用深度优先搜索,先递归到链表的末尾,然后从末尾开始两两交换.就相当于后续遍历而已 记得要先保存下来node.right节点,因为 ...

  10. springboot默认Thymeleaf模板引擎js的解决方案

    <script th:inline="javascript"> var btnexam=[[${btnexam}]]; console.log(btnexam); va ...