参考自 Android 群英传
1.设置渐变色画笔
private void iniView(){
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL);
mRectCount = 12;
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mWidth = getWidth();
mRectHeight = getHeight();
mRectWidth = (int) (mWidth * 0.6 / mRectCount);
mLinearGradient = new LinearGradient(
0,
0,
mRectWidth,
mRectHeight,
Color.WHITE,
Color.RED,
Shader.TileMode.CLAMP);
mPaint.setShader(mLinearGradient);
}
2.重写 onDraw() 方法
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for ( int i = 0 ; i < mRectCount ; i++ ){
mRandom = Math.random();
currentHeight = (float) (mRectHeight * mRandom);
canvas.drawRect(
(float)(mWidth*0.4/2 + mRectWidth*i + offset),
currentHeight,
(float)(mWidth*0.4/2 + mRectWidth*(i+1)),
mRectHeight,
mPaint);
}
postInvalidateDelayed(300);
}
完整代码
public class UI_3_6_3_2 extends View {
/*
数据成员
*/
private int mRectCount;//小矩形的数目
private int mWidth;
private int mRectWidth;//每个小矩形的宽度
private int mRectHeight;//每个小矩形的高度
private int offset = 5;//每个小矩形之间的偏移量
private float currentHeight;
/*
LinearGradient
*/
private LinearGradient mLinearGradient;//产生渐变效果
/*
Paint
*/
private Paint mPaint;//绘制小矩形的画笔
private double mRandom;
public UI_3_6_3_2(Context context) {
super(context);
iniView();
}
public UI_3_6_3_2(Context context, AttributeSet attrs) {
super(context, attrs);
iniView();
}
public UI_3_6_3_2(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
iniView();
}
private void iniView(){
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL);
mRectCount = 12;
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mWidth = getWidth();
mRectHeight = getHeight();
mRectWidth = (int) (mWidth * 0.6 / mRectCount);
mLinearGradient = new LinearGradient(
0,
0,
mRectWidth,
mRectHeight,
Color.WHITE,
Color.RED,
Shader.TileMode.CLAMP);
mPaint.setShader(mLinearGradient);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for ( int i = 0 ; i < mRectCount ; i++ ){
mRandom = Math.random();
currentHeight = (float) (mRectHeight * mRandom);
canvas.drawRect(
(float)(mWidth*0.4/2 + mRectWidth*i + offset),
currentHeight,
(float)(mWidth*0.4/2 + mRectWidth*(i+1)),
mRectHeight,
mPaint);
}
postInvalidateDelayed(300);
}
}