在学安卓之前有在其他网站上看到闪动文字的自定义控件,感觉很炫酷,高大上。
直到我看了《Android群英传》,这本书真不错,强烈推荐。
新手进阶很有帮助。
效果:
书中原文:
利用Paint对象的Shader渲染器。
先在onSizeChanged里进行初始化,根据View的宽设置LinearGradient渐变渲染器。
其中最关键的就是使用【getPaint()】方法获得当前回执TextView的Paint对象,并给这个Paint对象设置原生TextView没有的LinearGradient属性。
在onDraw方法中通过矩阵的方式来不断平移渐变效果。
代码:
private int mViewWidth, mTranslate; private Matrix mGradientMatrix; private Paint mPaint; private LinearGradient mLinearGradient; //渐变渲染器 @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); if (mGradientMatrix != null) { mTranslate += mViewWidth / 5; if (mTranslate > 2 * mViewWidth) { mTranslate = -mViewWidth; } mGradientMatrix.setTranslate(mTranslate,0); mLinearGradient.setLocalMatrix(mGradientMatrix); postInvalidateDelayed(100); } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { // TODO Auto-generated method stub 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.GRAY, 0xffffffff,Color.GRAY }, null, Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); mGradientMatrix = new Matrix(); } } }