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类绘制图形。

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

时间: 2022-09-19

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.首先说一下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

php使用gd2绘制基本图形示例(直线、圆、正方形)

本文实例讲述了php使用gd2绘制基本图形.分享给大家供大家参考,具体如下: 应用GD2函数可以绘制的图形有多种,最基本的图形包括条.圆.方形等.无论开发人员绘制多么复杂的图形,都是在这些最基本的图形的基础上进行深化的,只有掌握了最基本的图形的绘制方法,才能绘制出各种具有独特风格的图形. 在GD2中可以分别应用imageline()函数.imagearc()函数和imagerectangle()函数绘制直线,圆形和方法. 下面将介绍这些函数的使用方法: bool imageline( resou

Android编程之OpenGL绘图技巧总结

本文实例讲述了Android编程之OpenGL绘图技巧.分享给大家供大家参考,具体如下: 很久不用OpenGL ES绘图,怕自己忘记了,于是重新复习一遍,顺便原理性的东西总结如下: 1. Android 3D坐标系统 如图: Android的三维坐标系统中: 坐标原点位于中央, X轴从左向右延伸,原点左边的值为负数,右边为正数: Y轴从下向上延伸,原点下边的值为负数,上边为正数: Z轴屏幕里面向外面延伸,屏幕里面为负数,外面为正数. 2. 开发工具(OpenGL和OpenGL ES)介绍 Ope

Android编程之SurfaceView学习示例详解

本文实例讲述了Android编程之SurfaceView学习示例.分享给大家供大家参考,具体如下: SurfaceView是View的子类,使用的方式与任何View所派生的类都是完全相同的,可以像其他View那样应用动画,并把它们放到布局中. SurfaceView封装的Surface支持使用本章前面所描述的所有标准Canvas方法进行绘图,同时也支持完全的OpenGL ES库. 使用OpenGL,你可以再Surface上绘制任何支持的2D或者3D对象,与在2D画布上模拟相同的效果相比,这种方法

Android编程之SurfaceView实例详解

本文实例讲述了Android编程之SurfaceView用法.分享给大家供大家参考,具体如下: 关于surfaceView相关知识: View和SurfaceView主要区别: 1. View只能在UI线程中刷新,而SurfaceView可以在子线程中刷新 2. SurfaceView可以控制刷新频率 SurfaceView几个重要的方法: 1. 继承SurfaceView 后调用getHolder()方法可以获取到mSurfaceHolder对象这个对于可以控制SurfaceView的绘制 2

Android编程实现canvas绘制柱状统计图功能【自动计算宽高及分度值、可左右滑动】

本文实例讲述了Android编程实现canvas绘制柱状统计图功能.分享给大家供大家参考,具体如下: 这里实现了一个简单的柱状统计图,如下:   特点: 1.根据数据源自动计算每个条目的高度.宽度.间距,自动计算分度值. 2.当条目数较多时,可左右滑动查看全部内容,图形.文字同步滑动,并且松手后会渐渐的停下来(而不是立刻停下来). 代码: (1)核心代码:BarChartView.Java package com.sina.appbarchart; import android.app.Acti

Android开发之OpenGL绘制2D图形的方法分析

本文实例讲述了Android开发之OpenGL绘制2D图形的方法.分享给大家供大家参考,具体如下: Android为OpenGL ES支持提供了GLSurviceView组建,这个组建用于显示3D图形.GLSurviceView本身并不提供绘制3的图形的功能,而是由GLSurfaceView.Renderer来完成了SurviceView中3D图形的绘制. 归纳起来,在android中使用OpenGL ES需要3个步骤. 1. 创建GLSurviceView组件,使用Activity来显示GLS

Android编程之View简单学习示例

本文实例讲述了Android编程之View简单学习示例.分享给大家供大家参考,具体如下: View,是Android的一个超类,这个类几乎包含了所有的屏幕类型.每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展. 在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要.在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等. 游戏的核心是不断地绘图和刷新界面,An

Android编程之Activity中onDestroy()调用分析

本文分析了Android编程之Activity中onDestroy()调用方法.分享给大家供大家参考,具体如下: 刚刚一个BUG让我发现,如果 activity 实现了一个回调接口,然后使用 this 设置给需要回调接口的方法,这种应用场景比较常见,最常见的就是实现 onClickListener 接口,然后 findViewById().setOnClickListenr(this) 如果,这个回调接口设置到了一个静态对象(单例模式),当 activity finish() 的时候(按返回键,

Android编程之TabWidget选项卡用法实例分析

本文实例讲述了Android编程之TabWidget选项卡用法.分享给大家供大家参考,具体如下: 1 概览 TabWidget与TabHost.tab组件一般包括TabHost和TabWidget.FrameLayout,且TabWidget.FrameLayout属于TabHost. 是否继承TabActivity的问题 实现步骤.两种实现方式,一种是将每个Tab的布局嵌在TabHost中的FrameLayout中,每个Tab的内容布局与显示都在FrameLayout中进行,缺点是布局会显得很