当前位置: 首页 > news >正文

Android使用Canvas画图

1.参考:http://blog.csdn.net/rhljiayou/article/details/7212620/

2.常用方法:

  1.Canvas类

 drawArc 绘制弧

 drawBitmap 绘制位图

 drawCircle 绘制圆形

 drawLine 绘制线

 drawOval 绘制椭圆

 drawPath 绘制路径

 drawPoint 绘制一个点

 drawPoints 绘制多个点

 drawRect 绘制矩形

 drawRoundRect 绘制圆角矩形

 drawText 绘制字符串

 drawTextOnPath 沿着路径绘制字符串

  2.Paint类:

setARGB/setColor 设置颜色

setAlpha 设置透明度

setAntiAlias 设置是否抗锯齿

setShader 设置画笔的填充效果

setShadowLayer 设置阴影

setStyle 设置画笔风格

setStrokeWidth 设置空心边框的宽度

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

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

3.代码如下:

public class DrawView extends View {
  
    public DrawView(Context context) {
        super(context);  
    }

    public DrawView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);  
        /* 
         * 方法 说明 drawRect 绘制矩形 drawCircle 绘制圆形 drawOval 绘制椭圆 drawPath 绘制任意多边形 
         * drawLine 绘制直线 drawPoin 绘制点 
         */


        //设置画笔
        Paint paint=new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.STROKE);



        //画文本
        canvas.drawText("画圆",20,30,paint);
        //画圆
        canvas.drawCircle(100,30,30,paint);

        //画线
        paint.setColor(Color.BLACK);
        canvas.drawText("画线及圆弧",10,80,paint);
        canvas.drawLine(10,90,310,90,paint);//直线
        canvas.drawLine(330,90,430,150,paint);//斜线


        //画圆弧及扇形
        RectF oval1=new RectF(10,160,110,260);
        paint.setColor(Color.GREEN);

        canvas.drawArc(oval1,180,180,false,paint);
        //第一个参数:范围  第二个参数:开始角度  第三个参数:圆弧度数
        //第四个参数:false---圆弧   true---扇形
        //第五个参数:画笔

        oval1.set( 120,160,220,260);
        canvas.drawArc(oval1,20,60,true,paint);

        oval1.set(230,160,330,260);
        canvas.drawArc(oval1,200,240,true,paint);


        //画矩形
        paint.setColor(Color.BLUE);
        canvas.drawRect(10,280,210,380,paint);

        //绘制圆角矩形
        RectF re1=new RectF(250,280,450,380);
        canvas.drawRoundRect(re1,15,15,paint);


        //画椭圆
        RectF re2=new RectF(10,400,210,500);
        canvas.drawOval(re2, paint);

        //画三角形
        paint.setColor(Color.DKGRAY);
        Path path=new Path();
        path.moveTo(70,520);
        path.lineTo(10,580);
        path.lineTo(130,580);
        path.close();
        canvas.drawPath(path,paint);



        //画点
        paint.setStyle(Paint.Style.FILL);
        canvas.drawPoint(10,600,paint);//一个点
        canvas.drawPoints(new float[]{20,600,30,600,40,600},paint);//多个点


        //画贝塞尔曲线
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.RED);
        Path path1=new Path();
        path1.moveTo(100,620);
        path1.quadTo(150,550,170,700);
        canvas.drawPath(path1,paint);



        //画图片
        Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.pic6);
//        canvas.drawBitmap(bitmap,100,610,paint);//不限定图片大小  只指定左上角坐标
        RectF rectF=new RectF(100,710,400,1010);
        canvas.drawBitmap(bitmap,null,rectF,paint);//限定图片显示范围



        //-----------------设置渐变后绘制------------------

        //Paint设置渐变器
        Shader mShader=new LinearGradient(0,0,40,60,
                new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW},
                null,Shader.TileMode.REPEAT);
        paint.setShader(mShader);
        paint.setStyle(Paint.Style.FILL);
        //设置阴影
        paint.setShadowLayer(45,10,10,Color.BLACK);

        canvas.drawRect(440,710,640,910,paint);

    }  
}

4.效果图:

 

转载于:https://www.cnblogs.com/wangjiaghe/p/7048842.html

相关文章:

  • 14.6 将运算分组为事务
  • bpm功能指标
  • 《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型
  • nginx 前端调度 对后端的app的生存状态的检测
  • 《计算机科学导论》一1.6计算机科学作为一门学科
  • dede的应用
  • shell--3、Shell 传递参数
  • 网页版俄罗斯方块
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 测试框架Jest
  • 《伟大的计算原理》一交互系统
  • Maven的配置文件pom.xml
  • Spring boot设置启动监听端口
  • 幂等设计
  • 高度不固定时垂直居中
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 「面试题」如何实现一个圣杯布局?
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Brief introduction of how to 'Call, Apply and Bind'
  • ERLANG 网工修炼笔记 ---- UDP
  • java正则表式的使用
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • nginx 配置多 域名 + 多 https
  • ucore操作系统实验笔记 - 重新理解中断
  • 构造函数(constructor)与原型链(prototype)关系
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 聊聊redis的数据结构的应用
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用 QuickBI 搭建酷炫可视化分析
  • 微信开源mars源码分析1—上层samples分析
  • 微信小程序:实现悬浮返回和分享按钮
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • (12)Hive调优——count distinct去重优化
  • (6)设计一个TimeMap
  • (C语言)fgets与fputs函数详解
  • (安卓)跳转应用市场APP详情页的方式
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)c52学习之旅-简单了解单片机
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (四) Graphivz 颜色选择
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)linux 命令大全
  • (转)winform之ListView
  • (转)可以带来幸福的一本书
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net 验证控件和javaScript的冲突问题
  • .NetCore 如何动态路由