android实现圆角矩形背景的方法
本文实例讲述了android实现圆角矩形背景的方法。分享给大家供大家参考。具体如下:
1.java代码如下:
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.ColorFilter;
importandroid.graphics.Paint;
importandroid.graphics.Rect;
importandroid.graphics.drawable.Drawable;
importandroid.graphics.drawable.shapes.RoundRectShape;
importandroid.view.MotionEvent;
publicclassRoundRectDradableextendsDrawable{
privatestaticfinalfloatDEFAULT_RADIUS=6.f;
privatePaintmPaint=newPaint();
privateRoundRectShapemShape;
privatefloat[]mOuter;
privateintmColor;
privateintmPressColor;
privatefloatmTopLeftRadius=DEFAULT_RADIUS;
privatefloatmTopRightRadius=DEFAULT_RADIUS;
privatefloatmBottomLeftRadius=DEFAULT_RADIUS;
privatefloatmBottomRightRadius=DEFAULT_RADIUS;
publicRoundRectDradable(){
mColor=Color.WHITE;
mPressColor=Color.WHITE;
mPaint.setColor(mColor);
mPaint.setAntiAlias(true);
}
publicfloatgetTopLeftRadius(){
returnmTopLeftRadius;
}
publicvoidsetTopLeftRadius(floattopLeftRadius){
this.mTopLeftRadius=topLeftRadius;
}
publicfloatgetTopRightRadius(){
returnmTopRightRadius;
}
publicvoidsetTopRightRadius(floattopRightRadius){
this.mTopRightRadius=topRightRadius;
}
publicfloatgetBottomLeftRadius(){
returnmBottomLeftRadius;
}
publicvoidsetBottomLeftRadius(floatbottomLeftRadius){
this.mBottomLeftRadius=bottomLeftRadius;
}
publicfloatgetBottomRightRadius(){
returnmBottomRightRadius;
}
publicvoidsetBottomRightRadius(floatbottomRightRadius){
this.mBottomRightRadius=bottomRightRadius;
}
publicintgetPressColor(){
returnmPressColor;
}
publicvoidsetPressColor(intpressColor){
this.mPressColor=pressColor;
}
@Override
protectedvoidonBoundsChange(Rectbounds){
super.onBoundsChange(bounds);
refreshShape();
mShape.resize(bounds.right-bounds.left,bounds.bottom-bounds.top);
}
privatevoidrefreshShape(){
mOuter=newfloat[]{mTopLeftRadius,mTopLeftRadius
,mTopRightRadius,mTopRightRadius
,mBottomLeftRadius,mBottomLeftRadius
,mBottomRightRadius,mBottomLeftRadius};
mShape=newRoundRectShape(mOuter,null,null);
}
publicvoidsetColor(intcolor){
mColor=color;
mPaint.setColor(color);
}
@Override
publicvoiddraw(Canvascanvas){
mShape.draw(canvas,mPaint);
}
@Override
publicvoidsetAlpha(intalpha){
mPaint.setAlpha(alpha);
}
@Override
publicvoidsetColorFilter(ColorFiltercf){
mPaint.setColorFilter(cf);
}
@Override
publicintgetOpacity(){
returnmPaint.getAlpha();
}
}
2.java代码如下:
importandroid.graphics.Rect;
importandroid.graphics.drawable.StateListDrawable;
publicclassStateRoundRectDrawableextendsStateListDrawable{
privatestaticfinalfloatDEFAULT_RADIUS=6.f;
privatefloatmTopLeftRadius=DEFAULT_RADIUS;
privatefloatmTopRightRadius=DEFAULT_RADIUS;
privatefloatmBottomLeftRadius=DEFAULT_RADIUS;
privatefloatmBottomRightRadius=DEFAULT_RADIUS;
privateintmNormalColor;
privateintmPressedColor;
privateRoundRectDradablemNormalDradable;
privateRoundRectDradablemPressedDradable;
publicStateRoundRectDrawable(intnormalCorlor,intpressColor){
this.mNormalColor=normalCorlor;
this.mPressedColor=pressColor;
}
@Override
protectedvoidonBoundsChange(Rectbounds){
if(mNormalDradable==null){
mNormalDradable=newRoundRectDradable();
mNormalDradable.setTopLeftRadius(mTopLeftRadius);
mNormalDradable.setTopRightRadius(mTopRightRadius);
mNormalDradable.setBottomLeftRadius(mBottomLeftRadius);
mNormalDradable.setBottomRightRadius(mBottomRightRadius);
mNormalDradable.setColor(mNormalColor);
mNormalDradable.onBoundsChange(bounds);
}
if(mPressedDradable==null){
mPressedDradable=newRoundRectDradable();
mPressedDradable.setTopLeftRadius(mTopLeftRadius);
mPressedDradable.setTopRightRadius(mTopRightRadius);
mPressedDradable.setBottomLeftRadius(mBottomLeftRadius);
mPressedDradable.setBottomRightRadius(mBottomRightRadius);
mPressedDradable.setColor(mPressedColor);
mPressedDradable.onBoundsChange(bounds);
}
this.addState(newint[]{-android.R.attr.state_pressed},mNormalDradable);
this.addState(newint[]{android.R.attr.state_pressed},mPressedDradable);
}
publicfloatgetTopLeftRadius(){
returnmTopLeftRadius;
}
publicvoidsetTopLeftRadius(floattopLeftRadius){
this.mTopLeftRadius=topLeftRadius;
}
publicfloatgetTopRightRadius(){
returnmTopRightRadius;
}
publicvoidsetTopRightRadius(floattopRightRadius){
this.mTopRightRadius=topRightRadius;
}
publicfloatgetBottomLeftRadius(){
returnmBottomLeftRadius;
}
publicvoidsetBottomLeftRadius(floatbottomLeftRadius){
this.mBottomLeftRadius=bottomLeftRadius;
}
publicfloatgetBottomRightRadius(){
returnmBottomRightRadius;
}
publicvoidsetBottomRightRadius(floatbottomRightRadius){
this.mBottomRightRadius=bottomRightRadius;
}
publicintgetNormalColor(){
returnmNormalColor;
}
publicvoidsetNormalColor(intnormalColor){
this.mNormalColor=normalColor;
}
publicintgetPressedColor(){
returnmPressedColor;
}
publicvoidsetPressedColor(intpressedColor){
this.mPressedColor=pressedColor;
}
}
希望本文所述对大家的Android程序设计有所帮助。