1. Écrivez une classe héritant Voir
2. méthode de remplacement onDraw et la méthode OnSizeChanged
3. code est le suivant:
private Paint paint1;
private Paint mPaint;
private int mViewWidth;
private LinearGradient mlinearGradient;
private int mTranslate;//水平方向上平移的距离
private Matrix gradientMatrix;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (gradientMatrix != null) {
mTranslate += mViewWidth / 5;
//每次刷新view平移一点,如果到头就重新返回在开始平移
if (mTranslate >2*mViewWidth){
mTranslate = -mViewWidth;
}
gradientMatrix.setTranslate(mTranslate,0);
mlinearGradient.setLocalMatrix(gradientMatrix);
postInvalidateDelayed(100);
}
}
@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,0xffffffff,Color.BLUE}
, null
, Shader.TileMode.CLAMP);
}
mPaint.setShader(mlinearGradient);
gradientMatrix = new Matrix();
}
}
public void initPaint(){
paint1 = new Paint();
paint1.setColor(Color.BLUE);
paint1.setStyle(Paint.Style.FILL);
}
Le point essentiel est d'utiliser la méthode getPaint () pour obtenir la consommation de courant cible de peinture de TextView, et aux propriétés de linearGradient de réglage d'objet de peinture, dans la méthode onDraw, par une sorte de matrice pour traduire en continu gradient, de façon à dessiner le texte est de produire un effet dynamique . . Certains dont je n'utilisent pas souvent la classe, d' abord vers le bas, écrire un programme avec ce genre de chose plus que quelques fois sur le familier.
Ensuite , directement écrit à l'intérieur xml lors de l'utilisation sur la ligne:
<com.demo.alldemos.diyviews.MyTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
plus de…