Android 2D绘图(Canvas+paint)详解

目录:
1.重要类概述
2.重要类的常用方法
2.简单View绘制(圆、圆弧、矩形、弧形、圆角矩形、椭圆、文字等)
3.setXfermode(Xfermode xfermode)的运用

1.重要类概述
在2D绘制中我们常用的类,也是两个最重要的类就是Canvas(画布)和Paint(画笔),通过Canvas我们可以设置
绘制的形状和路径,当然仅仅形状和路径是不行的,我们还需要颜色啊,阴影啊,透明度等等的设置,这时候就是Paint的
事情了,Paint的作用主要就是设置绘图的风格,下面我们就总结一下这两个类常用的方法。

2.重要类的常用方法
(1)Canvas:

构造类方法:
Canvas()        //构造方法
Canvas(Bitmap bitmap) //带参构造方法,创建一个以bitmap位图为背景的Canvas

裁切类方法:
		clipPath(Path path, Region.Op op) //根据特殊path组合裁切图像,Region.Op定义了Region支持的区域间运算种类。
		
		clipRect(Rect rect, Region.Op op) //根据矩形组合裁切图像
		
		clipRegion(Region region, Region.Op op)
		
		concat(Matrix matrix) //通过matrix的设置可以对绘制的图形进行绘制伸缩和位移

图形绘制类方法:
		drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint) //绘制弧形
		
		drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint) //绘制bitmap位图
		
		drawPicture(Picture picture, RectF dst) //绘制图片
		
		drawCircle(float cx, float cy, float radius, Paint paint) //绘制圆
		
		drawLine(float startX, float startY, float stopX, float stopY, Paint paint) //绘制线
		
		drawLines(float[] pts, int offset, int count, Paint paint) //可以选择性的去掉一些数据绘制多条线
		
		drawOval(RectF oval, Paint paint) //绘制椭圆
		
		drawPath(Path path, Paint paint) //绘制路径
		
		drawPoint(float x, float y, Paint paint) //绘制点
		
		drawPoints(float[] pts, int offset, int count, Paint paint) //绘制多个点
		
		drawPosText(String text, float[] pos, Paint paint) //绘制文本,float[] pos指定每个文本位置
		
		drawRect(float left, float top, float right, float bottom, Paint paint) //绘制矩形
		
		drawRoundRect(RectF rect, float rx, float ry, Paint paint) //绘制圆角矩形
		
		drawText(String text, float x, float y, Paint paint) //绘制string文本
		
		drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint) //路径上绘制文本

填充类方法:
		drawRGB(int r, int g, int b) //使用RGB指定颜色填充canvas的bitmap画布
		
		drawARGB(int a, int r, int g, int b) //使用ARGB指定颜色填充canvas的bitmap画布

其他操作类方法:
		save() //保存Canvas状态,save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作
		
		restore() //恢复Canvas之前保存的状态,防止save后对Canvas执行的操作对后续的绘制有影响
		
		rotate(float degrees, float px, float py) //旋转
		
		scale(float sx, float sy) //缩放
		
		skew(float sx, float sy) //扭曲
		
		translate(float dx, float dy) //平移

(2)Paint:
文本设置相关方法:
			isUnderlineText() //判断是否有下划线
			
			setUnderlineText(boolean underlineText) //设置下划线
			
			getLetterSpacing() //获取字符间的间距
			
			setLetterSpacing(float letterSpacing) //设置字符间距
			
			getFontSpacing() //获取行间距
			
			isStrikeThruText() //判断文本是否有删除线
			
			setStrikeThruText(boolean strikeThruText) //设置文本删除线
			
			getTextSize() //获取字体大小
			
			setTextSize(float textSize) //设置字体大小
			
			getTypeface() //获取文字字体类型
			
			setTypeface(Typeface typeface) //设置文字字体类型
			
			getTextSkewX() //获取斜体文字的值
			
			setTextSkewX(float skewX) //设置斜体文字的值,负数为右倾斜,正数为左倾斜 官方推荐-0.25
			
			getTextScaleX() //获取文字水平缩放值
			
			setTextScaleX(float scaleX) //设置文本水平缩放值
			
			getTextAlign() //获取文本对其方式
			
			setTextAlign(Paint.Align align) //设置文本对其方式
			
			ascent() //baseline之上至字符最高处的距离
			
			descent() //baseline下面到字符最低处的距离
			
			measureText(CharSequence text, int start, int end) //测绘文本的宽度
			
		        getTextBounds(char[] text, int index, int count, Rect bounds) //获取文本宽高


			getTextWidths(String text, int start, int end, float[] widths) //精确获取文本宽度
			
			getTextLocale() //获取文本语言地理位置
			
			setTextLocale(Locale locale) //设置文本地理位置,也就是设置对应的语言

绘图设置相关方法:
			//设置画笔颜色
			setARGB(int a, int r, int g, int b) 
			setAlpha(int a) 
			setColor(int color)
			
			//获取画笔颜色
			getAlpha() 
			getColor() 
			
			isAntiAlias() //判断是否抗锯齿
			
			setAntiAlias(boolean aa)  //设置抗锯齿,虽然耗资源耗时间,但是一般会开启
			
			getStyle() //获取画笔样式
			
			setStyle(Paint.Style style) //设置画笔样式,FILL:实心; FILL_OR_STROKE:同时实心和空心; STROKE:空心
			
			setStrokeCap(Cap cap) //设置画笔样式, 圆形(Cap.Round),方形(Cap.SQUARE)
			
			getStrokeWidth() //获取画笔的粗细大小
			
			setStrokeWidth(float width) //设置画笔的粗细大小
			
			clearShadowLayer() //清除阴影层
			
			setShadowLayer(float radius, float dx, float dy, int shadowColor) //设置阴影
			
			getXfermode() //获取图形绘制的像素融合模式
			
			setXfermode(Xfermode xfermode) //设置图形绘制的像素融合模式和叠加模式,就是新绘制的像素与Canvas上对应位置已有的像素按照混合规则进行颜色混合
			
			getShader() //获取图形的渲染方式
			
			setShader(Shader shader) //设置图形的渲染方式,分别有线性渲染(LinearGradient) 环形渲染(RadialGradient) 组合渲染(ComposeShader) 扫描渐变渲染/梯度渲染(SweepGradient)

其他方法:
			reset() //清除画笔复位

2.简单View绘制(圆、圆弧、矩形、弧形、圆角矩形、椭圆、文字等)
我们通过自定义View的形式来展示我们绘画的图形,所以在此之前我们需要搭建一个自定义View的模型
1.添加自定义类继承View类(待会我们将在onDraw()方法中绘制我们的图形)
package com.example.drawview;


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


/**
 * Created by elimy on 2016-10-11.
 */
public class DrawCircleView extends View {
    Paint paint;
    public DrawCircleView(Context context) {
        super(context);
    }


    public DrawCircleView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


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

2.布局xml文件中应用(通过 包名.类名 的形式 (就像下面com.example.drawview.DrawTextView一样)指定我们定义的类)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.drawview.MainActivity">


    <com.example.drawview.DrawTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</RelativeLayout>

接下来我们就可以在onDraw()方法中绘制我们的图形了

(1)圆的绘制
1.1 代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值