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程序设计有所帮助。