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);
        }        
    };
}