使用Shader渲染器。
Shader渲染器主要对Paint画笔进行渲染。
Shader本身是一个抽象类,它提供了如下实现类。
BitmapShader:使用位图平铺的渲染效果。
LinearGradient:使用线性渐变来填充图形。
RadialGradient:使用圆形来渐变来填充图形。
SweepGradient:使用角度渐变来填充图形。
CompossShader:使用组合渲染来填充图形。
Matrix控制变换。重点内容
这个是Android提供的一个矩形工具类,它表示并不能对图像或者组件进行变换,
但是可以跟其他APi结合。
Matrix提供了如何方法来控制平移,旋转,和缩放。
- setTranslate(float dx ,float dy):控制Matrix进行平移。
- setRotate(float degrees):控制matrix进行旋转,degrees控制旋转的角度。
- setRotate(float degrees,float px,float py):设置以px,py为轴心进行旋转,degrees控制旋转角度。
- setSkew(float kx,float ky,float px,float py):控制Matrix以px,py为轴心进行倾斜。
kx,ky 为 X,Y方向上的倾斜距离。 - setScale(float sx,float sy):设置Matrix进行缩放,sx,sy控制 x,y方法上缩放比例。
- setScalte(float sx,float sy,float px,float py):设置Matrix以px,py为轴心进行缩放,sx,sy控制X,Y 方向上的缩放比例。
package com.example.drawdemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;
public class MyView4 extends TextView {
private LinearGradient mLinearGradient;
private Matrix mGradientMatrix;
private Paint mPaint;
// 记录View的宽度
private int mViewWidth = 0;
// 记录平移
private int mTranslate = 0;
public MyView4(Context context) {
this(context, null);
}
public MyView4(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyView4(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
// TODO Auto-generated method stub
super.onSizeChanged(w, h, oldw, oldh);
Log.e("View", "----onSizeChanged");
if (mViewWidth == 0) {
mViewWidth = getMeasuredWidth();
if (mViewWidth > 0) {
mPaint = getPaint();
// 参数一为渐变起初点坐标x位置,参数二为y轴位置,参数三和四分辨对应渐变终点,最后参数为平铺方式,这里设置为镜像
mLinearGradient = new LinearGradient(//
0, //
0, //
mViewWidth, //
0, //
new int[] { Color.RED, 0xffffffff, Color.BLUE }, //
null, //
Shader.TileMode.CLAMP);
mPaint.setShader(mLinearGradient);
mGradientMatrix = new Matrix();
}
}
}
// 通过矩阵的方式不断渐变效果,从而在绘制文字的时候,产生闪动效果。
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Log.e("View", "----onDraw");
if (mGradientMatrix != null) {
mTranslate += mViewWidth / 6;
if (mTranslate > 2 * mViewWidth) {
mTranslate = -mViewWidth;
}
Log.e("tan","mTranslate"+mTranslate);
// 控制Matrix进行平移。
mGradientMatrix.setTranslate(mTranslate, 0);
// mLinearGradient线性渐变设置当地Matrix。
mLinearGradient.setLocalMatrix(mGradientMatrix);
// 使用postInvalidate()刷新界面 每100毫秒刷新一次
postInvalidateDelayed(150);
}
}
}