android 自定义Textview多层边框,实现了文字内容闪烁的功能!

来源:互联网 发布:大数据时代书 编辑:程序博客网 时间:2024/04/30 10:00
自定义TextView类:
package com.example.mytext;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.widget.TextView;/** * Created by Administrator on 2016/7/11.
 */public class MyText extends TextView {    Paint mpaint1;    Paint mpaint2;    Paint mpaint;    int mViewWidth = 0;    int mTranslate;    Matrix matrix;    LinearGradient mLinearGradient;    public MyText(Context context, AttributeSet attrs) {        super(context, attrs);    }    public MyText(Context context) {        super(context);    }    public MyText(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onDraw(Canvas canvas) {        /**         * 初始画笔         */        mpaint1 = new Paint();        mpaint1.setColor(Color.YELLOW);        mpaint1.setStyle(Paint.Style.FILL);        mpaint2 = new Paint();        mpaint2.setColor(Color.GREEN);        mpaint2.setStyle(Paint.Style.FILL);        //绘制外层        canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),mpaint1);        //绘制内层        canvas.drawRect(10,10,getMeasuredWidth()-10,getMeasuredHeight()-10,mpaint2);       // canvas.drawRect(15,15,getMeasuredWidth()-15,getMeasuredHeight()-15,mpaint2);        canvas.save();        //绘制文字前平移10像素      //  canvas.translate(10,0);        //父类完成的方法,绘制文本        super.onDraw(canvas);        canvas.restore();        if (matrix != null){            mTranslate += mViewWidth / 5;            if (mTranslate > 2 * mViewWidth){                mTranslate = -mViewWidth;            }            matrix.setTranslate(mTranslate,0);            mLinearGradient.setLocalMatrix(matrix);            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.RED,0xffffffff,Color.BLUE},null,                        Shader.TileMode.CLAMP);                mpaint.setShader(mLinearGradient);                matrix = new Matrix();            }        }    }}
MainActivity:
public class MainActivity extends Activity {    MyText text;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        text = (MyText)findViewById(R.id.mytext);        text.setText("自定义的TextView,好激动,好激动!");    }}
XML:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"        tools:context="com.example.mytext.MainActivity">    <TextView        android:text="Hello World!"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/textView" />    <com.example.mytext.MyText        android:id="@+id/mytext"        android:layout_width="match_parent"        android:layout_height="50dp"        android:text="MyText"        android:layout_below="@+id/textView"        android:layout_centerHorizontal="true"        android:layout_marginTop="99dp"        android:textSize="20sp"        android:gravity="center" /></RelativeLayout>


1 0