Android绘图介绍——复杂图形描画

上一篇我们介绍了使用Paint描画基本图形,这一篇我们学习使用Paint描画复杂图形。

首先我们描画一个五边形,描画无边形时需要使用到Path类。

android.graphics.Path

Path类封装了多个化合物(轮廓)组成的直线段,二次曲线,三次曲线的几何路径。它可以绘制与canvas.drawPath(path, paint),无论是填充或抚摸(基于涂料的样式),或它可用于削波或绘制路径上的文本。

简而言之:可以用他来画几何图形、画曲线、画基于路径的文本。这是个绘图的路径类。

Path类的主要方法:

方法描述

void addArc(RectF oval, float startAngle, float sweepAngle)

画扇形(弧线)

void addCircle(float x, float y, float radius, Path.Direction dir)

画圆

void addRect(RectF rect, Path.Direction dir)

void addRect(float left, float top, float right, float bottom, Path.Direction dir)

画个矩形、四个参数对应与原点的相对距离的是个点。

void addRoundRect(RectF rect, float rx, float ry, Path.Direction dir)

画圆角矩形

moveTo(float x, float y)

设置下一个图形的开始点

lineTo(float x,float y)

画一条从最后一点到当前点的线。

如下为画五边形的代码:

package com.example.drawdomo;


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


public class MyView extends View {


    Context mContext;
    Paint paint;
    Path path;


    public MyView(Context context) {
        super(context);
        mContext = context;
        paint = new Paint();
        path = new Path();
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);




        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(5);


        int centerX = getWidth()/2;
        int centerY = getHeight()/2;
        int length=300;


        int[] xPoints = new int[5];
        int[] yPoints = new int[5];


//计算5个顶点
        for(int i=0;i<5;i++){
            xPoints[i]=(int)(centerX+length*Math.sin(i*2*Math.PI/5));
            yPoints[i]=(int)(centerY+length*Math.cos(i*2*Math.PI/5));
        }


//移动到第1个点
        path.moveTo(xPoints[0],yPoints[0]);


//根据另外4个点进行描画
        for(int i=1;i<5;i++){
            path.lineTo(xPoints[i],yPoints[i]);
        }


        path.close();
        canvas.drawPath(path,paint);
    }
}

如下为运行效果:

Domo代码:

Android绘图介绍-复杂图形描画资源-CSDN文库

然后我们再画一个太极的图形,这次没有使用Path类,而是描画了多个半圆和圆而形成的图案。

如下为画太极的代码:

package com.example.drawdomo;


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.view.View;


public class MyView extends View {


    Context mContext;
    Paint paint;


    public MyView(Context context) {
        super(context);
        mContext = context;
        paint = new Paint();
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);


        //设置画布背景颜色
        canvas.drawRGB(0,150,255);


        paint.setColor(Color.BLACK);
        paint.setStyle(Paint.Style.FILL);   //设置为填充
        paint.setAntiAlias(true);


        int diameter;
        int width = getWidth();
        int height= getHeight();


        if(width <= height) {
            diameter = width;
        }else{
            diameter = height;
        }


        //画两个半圆
        paint.setColor(Color.WHITE);
        canvas.drawArc(0,0,diameter,diameter,-90,180,true,paint);
        paint.setColor(Color.BLACK);
        canvas.drawArc(0,0,diameter,diameter,90,180,true,paint);


        //画两个小圆,形成圆中间的曲线
        paint.setColor(Color.BLACK);
        canvas.drawCircle(diameter/2,diameter/4,diameter/4,paint);
        paint.setColor(Color.WHITE);
        canvas.drawCircle(diameter/2,diameter*3/4,diameter/4,paint);


        //画两个小圆点
        paint.setColor(Color.WHITE);
        canvas.drawCircle(diameter/2,diameter/4,diameter/24,paint);
        paint.setColor(Color.BLACK);
        canvas.drawCircle(diameter/2,diameter*3/4,diameter/24,paint);


        paint.setColor(Color.RED);
        paint.setTextSize(100);
        paint.setStrokeWidth(5);
        paint.setStyle(Paint.Style.STROKE); //设置为描边
        paint.setFakeBoldText(true); //设置字体为粗体
        canvas.drawText("志强不息,厚德载物",100,1300,paint);
    }
}

如下为运行效果:


Domo代码:

Android绘图介绍-复杂图形描画资源-CSDN文库

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值