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. CentOS部署多台服务器JDK(shell脚本部署)

    部署7台新服务器的jdk,数量不算多,但也不打算一台一台的部署,写了个脚本执行 [ #!/bin/bash# JDK 安装包名jdk_packge="jdk-8u162-linux-x64. ...

  2. loto仪器_如何模拟输出凸轮轴和曲轴波形_用任意波形信号源SIG852?

    loto仪器_如何模拟输出凸轮轴和曲轴波形_用任意波形信号源SIG852? 在汽车传感器的波形检测应用中,有时候需要模拟各种汽车传感器的输出信号,用来驱动和监测对应的执行机构或者电路是否正常,这其中, ...

  3. 基于Netty4手把手实现一个带注册中心和注解的Dubbo框架

    阅读这篇文章之前,建议先阅读和这篇文章关联的内容. 1. 详细剖析分布式微服务架构下网络通信的底层实现原理(图解) 2. (年薪60W的技巧)工作了5年,你真的理解Netty以及为什么要用吗?(深度干 ...

  4. Vue安装Vue Devtools调试工具提示 Error: Cannot find module '@vue-devtools/build-tools' 解决办法

    我看网络上面安装Vue Devtools 调试工具的步骤几乎都是按照文章链接里的步骤进行安装, 但是在最终执行编译命令的时候 :npm run build ,提示如下错误: 尝试了很多方法,都不能解决 ...

  5. 96-00年CPU功耗感知调度研究

    最近读了一些1996-2000年的通过调度来降低cpu能耗的文章,主要文章有[1] [2] [3] [4] [5], 简单总结一些该时期单核CPU功耗感知的调度策略. 该时期还出现了很多关于低功耗电路 ...

  6. uni-app开发 uni.scss 样式的整体化设置

    今天在写uni-app设计的时候,界面图片.图标规格一直无法正常显示.查看了uni-app官网的代码注释后,发现了在style中设置<style lang="scss"> ...

  7. C/C++ Qt 给ListWidget增加右键菜单

    在上一篇博文<C/C++ Qt ListWidget 列表框组件应用>中介绍了ListWidget组件的基本使用技巧,本次将给ListWidget组件增加一个右键菜单,当用户在ListWi ...

  8. python 内置模块续(二)

    目录 python 内置模块补充 1.hashlib模块 简易使用: 高级使用: 进阶使用: 加盐处理: 校验文件一致性 2.logging日志模块 日志等级 常用处理 "四大天王" ...

  9. 难道你还不知道Spring之事务的回滚和提交的原理吗,这篇文章带你走进源码级别的解读。

    上一篇文章讲解了获取事务,并通过获取的connection设置只读,隔离级别等:这篇文章讲事务剩下的回滚和提交. 事务的回滚处理 之前已经完成了目标方法运行前的事务准备工作.而这些准备工作的最大目的无 ...

  10. python-django111111111111

    111 内置电池的意思就是,内置了很多功能,插件等等帮助文档:https://docs.djangoproject.com/en/3.0/ model,很多集成的东西,连接数据库等 vierm: Te ...