Canvas安卓画图类

canvas.drawText()绘图文字

public void drawText(String text, float x, float y, Paint paint)

text:要绘制的文字 x:绘制原点x坐标y:绘制原点y坐标paint:用来做画的画笔

上面这个构造函数是最常用的drawText方法,传进去一个String对象就能画出对应的文字。
但这里有两个参数需要非常注意,表示原点坐标的x和y.很多同学可能会认为,这里传进去的原点参数(x,y)是所在绘制文字所在矩形的左上角的点。但实际上并不是!比如,我们上面如果要画"harvic's blog"这几个字,这个原点坐标应当是下图中绿色小点的位置

我们重写MyView的onDraw函数,自定义一个基线,然后利用drawText画出来:

protected void onDraw(Canvas canvas) {

    super.onDraw(canvas);

    int baseLineX = 0 ;

    int baseLineY = 200;

    //画基线

    Paint paint = new Paint();

    paint.setColor(Color.RED);

    canvas.drawLine(baseLineX, baseLineY, 3000, baseLineY, paint);

    //写文字

    paint.setColor(Color.GREEN);

    paint.setTextSize(120); //以px为单位

    canvas.drawText("harvic\'s blog", baseLineX, baseLineY, paint);

}

在这里,先定义drawText原点的位置:(0,200)
首先,我们把(0,200)所在的这条横线画出来,所以我先画了一条线从点坐标为(0,200)到点坐标为(3000,200)的一条直线
然后利用canvas.drawText以(0,200)为原点画出文字

结论:
1、drawText是中的参数y是基线的位置。

2、一定要清楚的是,只要x坐标、基线位置、文字大小确定以后,文字的位置就是确定的了。

 

Canvas.drawCircle绘图圆

public void drawCircle (float cx, float cy, float radius, Paint paint)

  • cx:圆心的x坐标。
  • cy:圆心的y坐标。
  • radius:圆的半径。
  • paint:绘制时所使用的画笔

 

Canvas.drawRect

void drawRect(RectF rect, Paint paint) //绘制区域,参数一为RectF一个区域
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

oval :指定圆弧的外轮廓矩形区域。

startAngle: 圆弧起始角度,单位为度。

sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度。

useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。

paint: 绘制圆弧的画板属性,如颜色,是否填充等。

 

1. 填充圆弧但不含圆心:

 

 

 

 

 

mPaints[0] = new Paint();

mPaints[0].setAntiAlias(true);

mPaints[0].setStyle(Paint.Style.FILL);

mPaints[0].setColor(0x88FF0000);

mUseCenters[0] = false;

2. 填充圆弧带圆心(扇形)

 

mPaints[1] = new Paint(mPaints[0]);

mPaints[1].setColor(0x8800FF00);

mUseCenters[1] = true;

3. 只绘圆周,不含圆心

 

mPaints[2] = new Paint(mPaints[0]);

mPaints[2].setStyle(Paint.Style.STROKE);

mPaints[2].setStrokeWidth(4);

mPaints[2].setColor(0x880000FF);

mUseCenters[2] = false;

4. 只绘圆周,带圆心(扇形)

 

mPaints[3] = new Paint(mPaints[2]);

mPaints[3].setColor(0x88888888);

mUseCenters[3] = true;

 

调用invalidate(canvas重绘),会再触发onDraw,从而不停刷新显示,startAngle, sweepAngle周而复始,形成动画效果,最上的大图顺序显示drawArc的这四种用法:

Paint.Style.STROKE 表示当前只绘制图形的轮廓,而Paint.Style.FILL表示填充图形。

 

 

void drawPath(Path path, Paint paint) //绘制一个路径,参数一为Path路径对象 
void  drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)  //贴图,参数一就是我们常规的Bitmap对象,参数二是源区域(这里是bitmap),参数三是目标区域(应该在 canvas的位置和大小),参数四是Paint画刷对象,因为用到了缩放和拉伸的可能,当原始Rect不等于目标Rect时性能将会有大幅损失。
void  drawLine(float startX, float startY, float stopX, float stopY, Paint paint)  //画线,参数一起始点的x轴位置,参数二起始点的y轴位置,参数三终点的x轴水平位置,参数四y轴垂直位置,最后一个参数为Paint画刷对象。
void  drawPoint(float x, float y, Paint paint) //画点,参数一水平x轴,参数二垂直y轴,第三个参数为Paint对象。
void drawText(String text, float x, float y, Paint paint)  //渲染文本,Canvas类除了上面的还可以描绘文字,参数一是String类型的文本,参数二x轴,参数三y轴,参数四是Paint对象。
void  drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) //在路径上绘制文本,相对于上面第二个参数是Path路径对象

rect:

这是一个我们常用的一个“绘画相关的工具类”,常用语描述长方形/正方形,他只有4个属性

    public int left;
    public int top;
    public int right;
    public int bottom;

 

Paint:

void  setARGB(int a, int r, int g, int b)  设置Paint对象颜色,参数一为alpha透明通道

void  setAlpha(int a)  设置alpha不透明度,范围为0~255

void  setStyle(Paint.Style.STROKE);         

 //画笔类型 STROKE空心 FILL 实心 FILL_AND_STROKE 用契形填充

void  setAntiAlias(boolean aa)  //是否去锯齿

void  setDither(boolean dither);            //防抖动

void setFilterBitmap(boolean filter)  //对位图进行滤波处理

void  setColor(int color)  //设置颜色,这里Android内部定义的有Color类包含了一些常见颜色定义

void setStrokeWidth(float width)      //设置笔的宽度

void  setFakeBoldText(boolean fakeBoldText)  //设置伪粗体文本

void  setLinearText(boolean linearText)  //设置线性文本

PathEffect  setPathEffect(PathEffect effect)  //设置路径效果

Rasterizer  setRasterizer(Rasterizer rasterizer) //设置光栅化

Shader  setShader(Shader shader)  //设置阴影 

void  setTextAlign(Paint.Align align)  //设置文本对齐

void  setTextScaleX(float scaleX)  //设置文本缩放倍数,1.0f为原始

void  setTextSize(float textSize)  //设置字体大小

paint.setStrokeJoin(Paint.Join.ROUND);      

//画笔接洽点类型 如影响矩形但角的外轮廓
 paint.setStrokeCap(Paint.Cap.ROUND);      //画笔笔刷类型 如影响画笔但始末端

Typeface  setTypeface(Typeface typeface)  //设置字体,Typeface包含了字体的类型,粗细,还有倾斜、颜色等。

void  setUnderlineText(boolean underlineText)  //设置下划线

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值