您的位置:首页 > 其它

自定义带闪动和多背景的textview

2016-04-20 11:13 302 查看
1 首先自定义一个多背景的textview

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;

/**
* 作者:水东流
* 时间:2016/4/20
* 带框文字效果textview
*/
public class MyTextView extends TextView {

private Paint mpaint1;//画笔1
private Paint mpaint2;//画笔2

public MyTextView(Context context) {
this(context, null);
}

public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

private void init() {
mpaint1 = new Paint();
mpaint2 = new Paint();
mpaint1.setColor(getResources().getColor(android.R.color.holo_blue_light));
mpaint2.setColor(Color.WHITE);//背景色
mpaint1.setStyle(Paint.Style.FILL);
mpaint2.setStyle(Paint.Style.FILL);
}

/**
* 绘图
*
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas) {
//绘制外层矩形
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mpaint1);
//绘制内侧矩形
canvas.drawRect(10, 10, getMeasuredWidth() - 10, getMeasuredHeight() - 10, mpaint2);
canvas.save();
//绘制文字前平移10像素
canvas.translate(10, 0);
//父类的方法,绘制文本
super.onDraw(canvas);
canvas.restore();
}

一般拓展是在onDraw方法中对原生控件行为进行拓展

2 下面是带闪动的多背景textview,这里就直接继承上面的多背景textview了

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;

/**
* 作者:水东流
* 时间:2016/4/20
* 闪动效果
*/
public class MyMoveView extends  MyTextView {
private int mViewWidth = 0;//宽度
private Paint mpaint;
private LinearGradient mLinearGradient;
private Matrix mGradientMatrix;
private  int mTanslate;
public MyMoveView(Context context) {
super(context);
}

public MyMoveView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public MyMoveView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

/**
* 在此初始化闪动所需值
* @param w
* @param h
* @param oldw
* @param oldh
*/
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (mViewWidth == 0) {
mViewWidth = getMeasuredWidth();
if (mViewWidth > 0) {
mpaint = getPaint();
mLinearGradient=new LinearGradient(0,0,mViewWidth,0,new int[]{Color.BLUE,0xfffffff,Color.BLUE},null, Shader.TileMode.CLAMP);
mpaint.setShader(mLinearGradient);
mGradientMatrix=new Matrix();
}
}
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(mGradientMatrix!=null){
mTanslate+=mViewWidth;
if(mTanslate>2*mViewWidth){
mTanslate=-mViewWidth;
}
mGradientMatrix.setTranslate(mTanslate,0);
mLinearGradient.setLocalMatrix(mGradientMatrix);
postInvalidateDelayed(100);
}
}

}

这里在onDraw方法里面,通过矩阵的方式来不断平移渐变效果,从而在绘制文字时,产生动态的闪动效果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: