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