Android利用Canvas类绘制图形

本文实例为大家分享了Android利用Canvas类绘制图形的具体代码,供大家参考,具体内容如下

首先介绍一下相关基础知识。

1.画笔(paint)

1.1、作用:画笔对象通过属性来设置笔的颜色、粗细、风格等。

1.2、设置图形绘制属性相关方法:

setARGB():设置画笔的颜色;
setAlpha():设置绘制图形的透明度;
setStyle():设置画笔的样式风格;
setStrockWidth():设置画笔的宽度;

1.3、设置文本绘制属性的相关方法:

setTextSize():设置字体的大小;
setTextAlign():设置文字的对齐方向;

2.画布(canvas)

画布是画笔绘图的基础,并提供了常用的绘图方法。
常见的绘制方法:

drawColor():设置画布的背景色;
drawLine():绘制直线,通过设定起始点实现;
drawLines():绘制收尾连接的多条直线,使用数组参数;
drawPoint():绘制点;多个点使用drawPoints();
drawRect():绘制矩形,通过指定左上及右下点实现;
drawRoundRect():绘制圆角矩形;
drawCircle():绘制圆,使用圆心坐标,半径实现;
drawOval():绘制椭圆,使用其外切矩形实现;
drawPath():绘制任意多边形,通过指定路径实现;
drawArc():绘制圆弧,通过指定所在椭圆,起止弧度实现;
drawText():绘制文本,指定文本内容、起始坐标实现;
drawBitmap():绘制图像,通过指定图像资源,位置实现;
save()、restore():可保存、恢复画布状态;
clipRect():裁剪画布,通过指定一个矩形区域来确定范围;
rotate():旋转画布,通过指定旋转角度,旋转中心实现;

3.Path绘图

在View上将N个点练成一条“路径。”

3.1、使用Path类对象,创建一条路径

path对象的常用方法:”

moveTo(x,y):移动绘图笔到指定坐标x,y;
lineTo(x,y):从上一坐标画线到指定坐标x,y;

3.2、使用Canvas类的drawPath()方法来绘制路径

drawPath(Path path,Paint paint):使用Path对象定义的路径进行绘制;

3.3、可选用不同的绘制效果

绘制效果使用PathEffect类的各种子类来定义;
使用Paint对象的setPathEffects(PathEffect eff)来将绘制效果定义到画笔中。

4.绘制图形实例步骤

1.需要自定义一个继承自View类的子类。
2.在自定义View类中,重写其onDraw方法。
在onDraw方法中,使用canvas进行绘图。
3.在MainActivity中,创建自定义View对象并加载。
 1).可直接加载自定义View对象为主界面。
 2).可在主界面XML文件中的布局管理器中,加载自定义View对象。

5.绘制图形实例

1.打开Android Studio,新建工程后,自定义类DrawPaint继承自View,重写View中的onDraw(Canvas canvas)方法。

package lession.example.com.learncanvas;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.view.View;

public class DrawPaint extends View {
    Paint pt;
    public DrawPaint(Context context) {
        super(context);
        pt = new Paint();//创建画笔
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        pt.setARGB(255,255,0,0);
        pt.setStrokeWidth(3);
        pt.setStyle(Paint.Style.FILL);
        pt.setTextSize(60);
        //画圆
        canvas.drawText("圆:",80,120,pt);
        canvas.drawCircle(200,100,30,pt);
        //画矩形
        canvas.drawText("矩形:",80,220,pt);
        canvas.drawRect(250,180,400,250,pt);
        //正方形
        canvas.drawText("正方形:",80,320,pt);
        canvas.drawRect(290,290,370,370,pt);
        //圆角矩形
        canvas.drawText("圆角矩形:",80,440,pt);
        RectF rectF = new RectF(350,400,550,500);
        canvas.drawRoundRect(rectF,20,30,pt);
        //椭圆形
        canvas.drawText("椭圆形:",80,600,pt);
        RectF oval = new RectF(350,550,650,700);
        canvas.drawOval(oval,pt);
        //三角形
        canvas.drawText("三角形:",80,750,pt);
        Path path = new Path();
        path.moveTo(300,700);
        path.lineTo(300,800);
        path.lineTo(400,800);
        path.close();
        canvas.drawPath(path,pt);
        //五边形
        canvas.drawText("五边形:",80,900,pt);
        Path path1 = new Path();
        path1.moveTo(300,900);
        path1.lineTo(400,900);
        path1.lineTo(450,1000);
        path1.lineTo(400,1100);
        path1.lineTo(300,1100);
        path1.lineTo(300,1000);
        path1.close();
        canvas.drawPath(path1,pt);
    }
}

2.在MainActivity.java中。

package lession.example.com.learncanvas;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        DrawPaint MyPaint = new DrawPaint(MainActivity.this);
        setContentView(MyPaint);
    }
}

运行结果:

这就是利用Canvas类绘制图形。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android编程之canvas绘制各种图形(点,直线,弧,圆,椭圆,文字,矩形,多边形,曲线,圆角矩形)

    本文实例讲述了Android编程之canvas绘制各种图形的方法.分享给大家供大家参考,具体如下: 1.首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into

  • Android编程开发之在Canvas中利用Path绘制基本图形(圆形,矩形,椭圆,三角形等)

    本文实例讲述了Android编程开发之在Canvas中利用Path绘制基本图形的方法.分享给大家供大家参考,具体如下: 在Android中绘制基本的集合图形,本程序就是自定义一个View组件,程序重写该View组件的onDraw(Canvase)方法,然后在该Canvas上绘制大量的基本的集合图形. 直接上代码: 1.自定义的View组件代码: package com.infy.configuration; import android.content.Context; import andro

  • Android开发之图形图像与动画(一)Paint和Canvas类学习

    Paint类 *Paint类代表画笔,用来描述图形的颜色和风格,如线宽,颜色,透明度和填充效果等信息. *使用Paint类时,需要先创建该类的对象,可以通过该类的构造函数实现.通常情况的实现代码是: *Paintpaint=newPaint(); *创建完Paint对象后,可以通过该对象提供的方法对画笔的默认设置进行改变 Canvas *Canvas类代表画布,通过该类提供的构造方法,可以绘制各种图形. *通常情况下,要在Android中绘图,需要先创建一个继承自View类的视图,并且在该类中重

  • Android利用Canvas类绘制图形

    本文实例为大家分享了Android利用Canvas类绘制图形的具体代码,供大家参考,具体内容如下 首先介绍一下相关基础知识. 1.画笔(paint) 1.1.作用:画笔对象通过属性来设置笔的颜色.粗细.风格等. 1.2.设置图形绘制属性相关方法: setARGB():设置画笔的颜色:setAlpha():设置绘制图形的透明度:setStyle():设置画笔的样式风格:setStrockWidth():设置画笔的宽度: 1.3.设置文本绘制属性的相关方法: setTextSize():设置字体的大

  • Android利用贝塞尔曲线绘制动画的示例代码

    目录 彩虹系列 弹簧动画 复杂立体感动画 总结 前面我们花了几篇介绍了贝塞尔曲线的原理和绘制贝塞尔曲线,着实让我们见识到了贝塞尔曲线的美.好奇心驱使我想看看贝塞尔曲线动起来会是什么样?本篇就借由动画驱动贝塞尔曲线绘制看看动起来的贝塞尔曲线什么效果. 彩虹系列 通过动画控制绘制的结束点,就可以让贝塞尔曲线动起来.例如下面的动图展示的效果,看起来像搭了一个滑滑梯一样.实际上就是用7条贝塞尔曲线实现的,我们使用了 Animation 对象的值来控制绘制的结束点,从而实现了对应的动画效果. 具体源码如下

  • Android利用Flutter path绘制粽子的示例代码

    目录 前言 绘制 基本轮廓 粽叶 嘴巴 眼睛 腮红 手&脚 头巾 咸甜是一家 发声 动画控制嘴巴开合 用到的技术点 总结 前言 大家好,端午将至,首先提前祝小伙伴端午安康,端午作为中华民族的非常重要的传统节日,粽子那是必不可少的,但是你真的知道粽子的历史吗? 今天跟随本篇文章用Flutter path画一个会科普节日的的粽子吧- 绘制 基本轮廓 首先我们需要将粽子的基本轮廓绘制出来,通过图片可以看到粽子的轮廓是一个圆圆的三角形状, 本篇文章所有的图形都是用纯Path路径制作,这里我们可以将粽子的

  • Android利用Canvas标点画线并加入位移动画(1)

    本文实例为大家分享了Android利用Canvas标点画线,并加入位移动画的具体代码,供大家参考,具体内容如下 1.背景 最近由于公司业务需要,需要自己实现一个点画线,移动的需求,这自然就想到了利用Canvas进行描点,画线连线. 过程比较简单,查阅了网上文章,发现写的都特别片面,很多人也会遇到类似需求,这里把整个实现过程讲一下,并且在实现过程遇到的一些小坑讲给大家. 先看效果图 其实点击检索,小人可以按照画好的路线进行移动. 具体代码: Canvas画点连线 class DrawView ex

  • Android利用Canvas标点画线并加入位移动画(2)

    本文实例为大家分享了Android利用Canvas标点画线,并加入位移动画的具体代码,供大家参考,具体内容如下 1.背景 继上次公司需求实现Canvas面板标记点,画折现,并利用属性动画进行沿线移动之后,又有了新问题. 发现公司提供的坐标有正值有负值,并且值很大,很容易超出屏幕范围,而且由于我们Canvas坐标方向与正常坐标系不符合,由此发现做的图方向也不对. 2.问题 Canvas坐标系位于屏幕左上角,且Y正向坐标向下,如何转换? 由于坐标有正有负,而Canvas默认只显示正方向,如何解决显示

  • Python使用draw类绘制图形示例讲解

    目录 视频 Pygame模块之pygame.draw 示例1 示例2 视频 观看视频 Pygame模块之pygame.draw 本文将主要介绍Pygame的draw模块,主要内容翻译自pygame的官方文档 pygame.draw 模块用于在Surface上绘制一些简单的图形,比如点.直线.矩形.圆.弧等. pygame.draw中函数的第一个参数总是一个surface,然后是颜色,再后会是一系列的坐标等.稍有些计算机绘图经验的人就会知道,计算机里的坐标,(0,0)代表左上角.而返回值是一个Re

  • Flask框架利用Echarts实现绘制图形

    目录 实现绘制饼状图 实现绘制柱状图 实现绘制折线图 echarts是百度推出的一款开源的基于JavaScript的可视化图表库,该开发库目前发展非常不错,且支持各类图形的绘制可定制程度高,Echarts绘图库同样可以与Flask结合,前台使用echart绘图库进行图形的生成与展示,后台则是Flask通过render_template方法返回一串JSON数据集,前台收到后将其应用到绘图库上,实现动态展示Web服务日志状态功能. 如下演示案例中,将分别展示运用该绘图库如何前后端交互绘制(饼状图,柱

  • Android利用AudioRecord类实现音频录制程序

    AudioRecord类相对于MediaRecorder来说,更加接近底层,为我们封装的方法也更少.然而实现一个AudioRecord的音频录制程序也很简单.本实例代码如下: package demo.camera; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; imp

  • Android开发 OpenGL ES绘制3D 图形实例详解

    OpenGL ES是 OpenGL三维图形API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设计. Ophone目前支持OpenGL ES 1.0 ,OpenGL ES 1.0 是以 OpenGL 1.3 规范为基础的,OpenGL ES 1.1 是以 OpenGL 1.5 规范为基础的.本文主要介绍利用OpenGL ES绘制图形方面的基本步骤. 本文内容由三部分构成.首先通过EGL获得OpenGL ES的编程接口;其次介绍构建3D程序的基本概念;最后是一个应用程序示例. OpenGL E

随机推荐