android 动态渐变 字符效果
public class GradientView extends View { private String TAG = " GradientView " ; private Handler mTimeTickHandler; private int mIndex = 190 ; private Shader mShader; private Bitmap mBitmapBg; private Bitmap mBitmapWord; private int mMinWidth = 190 ; private int mMaxWidth ; private int mUpdateStep = 20 ; private Paint mPaint = new Paint(); public GradientView(Context context) { super (context); } public GradientView(Context context, AttributeSet attrs) { super (context, attrs); mTimeTickHandler = new Handler(); setFocusable( true ); InputStream is = context.getResources().openRawResource(R.drawable.sliding_channel_background); mBitmapBg = BitmapFactory.decodeStream(is); mMaxWidth = mBitmapBg.getWidth(); mBitmapWord = Bitmap.createBitmap(mBitmapBg.getWidth(), mBitmapBg.getHeight(), Bitmap.Config.ALPHA_8); drawIntoBitmap(mBitmapWord, context); mTimeTickHandler.post(mTimeTickRunnable); } private void drawIntoBitmap(Bitmap bm, Context context) { float x = bm.getWidth(); float y = bm.getHeight(); Canvas c = new Canvas(bm); Paint p = new Paint(); p.setAntiAlias( true ); p.setColor(Color.WHITE); p.setTextSize( 45 ); p.setTextAlign(Paint.Align.CENTER); c.drawText(context.getResources().getString(R.string.slide_unlock), x / 2 + 10 , y / 2 , p); } @Override protected void onDraw(Canvas canvas) { // canvas.drawBitmap(mBitmapBg, 0, 0, p); mPaint.setShader(mShader); canvas.drawBitmap(mBitmapWord, 50 , 13 , mPaint); } public void removeHandlerGradient(){ mTimeTickHandler.removeCallbacks(mTimeTickRunnable); } private Runnable mTimeTickRunnable = new Runnable(){ public void run() { mIndex += mUpdateStep; if (mIndex >= mMaxWidth){ mIndex = mMinWidth; } mShader = new LinearGradient( 0 , 150 , mIndex, 150 , new int [] { Color.GRAY,Color.GRAY,Color.GRAY, Color.GRAY, Color.WHITE }, null , Shader.TileMode.MIRROR); postInvalidate(); mTimeTickHandler.postDelayed(mTimeTickRunnable, 100 ); } }; } 本文转自wanqi博客园博客,原文链接: http://www.cnblogs.com/wanqieddy/archive/2011/07/11/2103301.html 如需转载请自行联系原作者