自定义带闪动和多背景的textview
2016-04-20 11:13
302 查看
1 首先自定义一个多背景的textview
一般拓展是在onDraw方法中对原生控件行为进行拓展
2 下面是带闪动的多背景textview,这里就直接继承上面的多背景textview了
这里在onDraw方法里面,通过矩阵的方式来不断平移渐变效果,从而在绘制文字时,产生动态的闪动效果
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方法里面,通过矩阵的方式来不断平移渐变效果,从而在绘制文字时,产生动态的闪动效果
相关文章推荐
- Android 颜色渲染(九) PorterDuff及Xfermode详解
- java web笔记-servlet
- C# GET 和 SET作用
- JS 正则表达式
- Android开发之定义接口暴露数据
- 什么时候使用tab键来对齐代码和代码的风格
- 输出n对符合的括号组合
- android自定义控件- 自定义组合控件
- Swift报错type ''does not conform to protocol 'UITableViewDataSource'
- USB驱动开发(六)操作USBD.SYS
- 解析C语言中结构体struct的对齐问题
- The hierarchy of the type XXAdvice is inconsistent
- Codeforces Round #106(Div. 2) 149D. Coloring Brackets 区间DP 记忆化搜索
- Spring scope属性详解
- IDEA中如何新建一个带有-P目录的项目
- PCL系列——平面模型分割
- 推荐一个latex简历模板的网站给大家
- hdu 【3833】YY's new problem
- leetcode11.ContainerWithMostWater
- 基元类型