平移,同时使用new Rect方法设置矩形
[代码]java代码: canvas.translate(200,200); mPaint.setColor(Color.BLUE); canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);
[代码]java代码: canvas.scale(0.5f,0.5f); mPaint.setColor(Color.BLUE); canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);
[代码]java代码: canvas.rotate(90); mPaint.setColor(Color.BLUE); canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);
[代码]java代码: canvas.skew(1,0.5f); mPaint.setColor(Color.BLUE); canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);
save():用于保存canvas的状态,之后可以调用canvas的平移、旋转、缩放、错切、裁剪等操作。
restore():在save之后调用,用于恢复之前保存的画布状态,从而在之后的操作中忽略save与restore之间的画布变化。
[代码]java代码: float point = Math.min(mWidth,mHeight)*0.06f/2; float r = point*(float) Math.sqrt(2); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(Color.BLACK); canvas.save(); canvas.rotate(90); canvas.drawCircle(200,0,r,mPaint);//圆心(200,0) canvas.restore(); mPaint.setColor(Color.BLUE); canvas.drawCircle(200,0,r,mPaint);//圆心(200,0)
保存画布,旋转90°,绘制一个圆,之后恢复画布,使用相同参数再绘制一个圆。可以看到在恢复画布前后,相同参数绘制的圆,分别显示在了坐标系的不同位置。
二、豆瓣加载动画绘制2个点和一个半圆弧
[代码]java代码: mPaint.setStyle(Paint.Style.STROKE);//设置画笔样式为描边,如果已经设置,可以忽略 mPaint.setColor(Color.GREEN); mPaint.setStrokeWidth(10); float point = Math.min(mWidth,mHeight)*0.2f/2; float r = point*(float) Math.sqrt(2); RectF rectF = new RectF(-r,-r,r,r); canvas.drawArc(rectF,0,180,false,mPaint); canvas.drawPoints(new float[]{ point,-point ,-point,-point },mPaint);
但是豆瓣表情在旋转的过程中,是一个链接着两个点的270°的圆弧
[代码]java代码: mPaint.setColor(Color.GREEN); mPaint.setStrokeWidth(10); float point = Math.min(mWidth,mHeight)*0.2f/2; float r = point*(float) Math.sqrt(2); RectF rectF = new RectF(-r,-r,r,r); canvas.drawArc(rectF,-180,270,false,mPaint);
简单说下ValueAnimator类:
API 简介
ofFloat(float… values) 构建ValueAnimator,设置动画的浮点值,需要设置2个以上的值
setDuration(long duration) 设置动画时长,默认的持续时间为300毫秒。
setInterpolator(TimeInterpolator value) 设置动画的线性非线性运动,默认AccelerateDecelerateInterpolator
addUpdateListener(ValueAnimator.AnimatorUpdateListener listener) 监听动画属性每一帧的变化