.Android中TextView显示彩虹字

 

Android中想要在TextView显示彩虹字实现很简单,就是对颜色进行线性的渐变。用到的类是LinearGradient,直接贴代码:

1.类TextViewTest.java继承TextView

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Shader.TileMode;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TextViewTest extends TextView {
    private LinearGradient mGradient;
    private int[] mGradientColors = { Color.RED, Color.rgb(255, 165, 0),
            Color.YELLOW, Color.GREEN, Color.rgb(0, 255, 255), Color.BLUE,
            Color.rgb(160, 32, 240) };
    private int mTitleWidth;
    private String mTitle = "三十六天罡,七十二地煞,乃是天地正邪之氣所生";

    public TextViewTest(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.FILL_PARENT));
        setWillNotDraw(false);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        measure(0, 0);

        Paint paint = new Paint();
        paint.setStyle(Style.FILL_AND_STROKE);
        mGradient = new LinearGradient(0, 0, getWidth(), getMeasuredHeight(),
                mGradientColors, null, TileMode.REPEAT);
        paint.setShader(mGradient);

        mTitleWidth = 0;
        float[] width = new float[mTitle.length()];
        paint.getTextWidths(mTitle, width);
        Log.i("Tag", "Width.length= " + width.length);
        int start = 0;
        int offsetY = 10;
        for (int j = 0; j < mTitle.length(); j++) {
            mTitleWidth += (int) Math.ceil(width[j]);
            if (mTitleWidth > getWidth()) {
                canvas.drawText(mTitle.substring(start, j), 0, offsetY, paint);
                mTitleWidth = 0;
                start = start + j;
                offsetY = offsetY + getMeasuredHeight() + 5;
                j--;
            }
        }
        if (mTitleWidth > 0) {
            canvas.drawText(mTitle.substring(start), 0, offsetY, paint);
        }
    }

}

2.主界面类TextViewColor

import android.app.Activity;
import android.os.Bundle;
public class TextViewColor extends Activity {
    private TextViewTest mTextViewTest;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mTextViewTest = new TextViewTest(this);
        setContentView(mTextViewTest);
    }

}

3.效果图

Android中TextView显示彩虹字 - Gobby.X - Just Miss.Gobby

 
posted @ 2011-11-24 15:07  Glan  阅读(375)  评论(0)    收藏  举报