packagecom.example.myapp.view;importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.LinearGradient;importandroid.graphics.Matrix;importandroid.graphics.Paint;importandroid.graphics.Shader;importandroid.util.AttributeSet;importandroid.util.Log;importandroid.widget.Button;/*** Created by zyr
* DATE: 16-3-2
* Time: 上午10:39
* Email: [email protected]*/
public class MyShimmerButton extendsButton {privatePaint mPaint;private intmWdith,mHeight,mTranslateX,deltaX;privateLinearGradient mLinearGradient;privateMatrix mMatrix;private boolean isShimmer = false;publicMyShimmerButton(Context context) {super(context);
}publicMyShimmerButton(Context context, AttributeSet attrs) {super(context, attrs);
}public MyShimmerButton(Context context, AttributeSet attrs, intdefStyleAttr) {super(context, attrs, defStyleAttr);
}
@Overrideprotected voidonFinishInflate() {super.onFinishInflate();
Log.d("zyr","onFinishInflate");
}
@Overrideprotected void onMeasure(int widthMeasureSpec, intheightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.d("zyr", "onMeasure");
}
@Overrideprotected void onLayout(boolean changed, int left, int top, int right, intbottom) {super.onLayout(changed, left, top, right, bottom);
Log.d("zyr", "onLayout");
}
@Overrideprotected void onSizeChanged(int w, int h, int oldw, intoldh) {super.onSizeChanged(w, h, oldw, oldh);
Log.d("zyr", "onSizeChanged");if(w!=oldw || h!=oldh){
isShimmer= true;
mWdith=w;
mHeight=h;
mPaint=getPaint();
mLinearGradient= new LinearGradient(0,0,mWdith,mHeight,new int[]{0x33ffffff, 0xffffffff, 0x33ffffff} , new float[] { 0, 0.5f, 1}, Shader.TileMode.CLAMP);
mMatrix= newMatrix();
mLinearGradient.setLocalMatrix(mMatrix);
deltaX= mWdith / 10;
mPaint.setShader(mLinearGradient);
}
}
@Overrideprotected voidonDraw(Canvas canvas) {super.onDraw(canvas);if(isShimmer){if(mTranslateX > mWdith*2){
mTranslateX= -mWdith;
}else{
mTranslateX= mTranslateX +deltaX;
}
mMatrix.setTranslate(mTranslateX,0);
mLinearGradient.setLocalMatrix(mMatrix);
postInvalidateDelayed(50);
}
}
}