目录:
1.重要类概述
2.重要类的常用方法
2.简单View绘制(圆、圆弧、矩形、弧形、圆角矩形、椭圆、文字等)
3.setXfermode(Xfermode xfermode)的运用
1.重要类概述
在2D绘制中我们常用的类,也是两个最重要的类就是Canvas(画布)和Paint(画笔),通过Canvas我们可以设置
绘制的形状和路径,当然仅仅形状和路径是不行的,我们还需要颜色啊,阴影啊,透明度等等的设置,这时候就是Paint的
事情了,Paint的作用主要就是设置绘图的风格,下面我们就总结一下这两个类常用的方法。
2.重要类的常用方法
(1)Canvas:
构造类方法:
裁切类方法:
图形绘制类方法:
填充类方法:
其他操作类方法:
(2)Paint:
文本设置相关方法:
绘图设置相关方法:
其他方法:
2.简单View绘制(圆、圆弧、矩形、弧形、圆角矩形、椭圆、文字等)
我们通过自定义View的形式来展示我们绘画的图形,所以在此之前我们需要搭建一个自定义View的模型
1.添加自定义类继承View类(待会我们将在onDraw()方法中绘制我们的图形)
2.布局xml文件中应用(通过 包名.类名 的形式 (就像下面com.example.drawview.DrawTextView一样)指定我们定义的类)
接下来我们就可以在onDraw()方法中绘制我们的图形了
(1)圆的绘制
1.1 代码
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 代码