Created
September 29, 2015 13:11
-
-
Save felipearimateia/e08df89e265d039cb68c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class BorderDrawable extends Drawable { | |
private int mLeftBorderWidth = 0; | |
private int mRightBorderWidth = 0; | |
private int mLeftBorderColor = Color.BLACK; | |
private int mRightBorderColor = Color.BLACK; | |
private int mTopBorderWidth = 0; | |
private int mBottomBorderWidth = 0; | |
private int mTopBorderColor = Color.BLACK; | |
private int mBottomBorderColor = Color.BLACK; | |
private Paint paint; | |
private Rect rect; | |
private Path path; | |
private Rect tRect; | |
private Drawable background; | |
public BorderDrawable(Drawable background) { | |
paint = new Paint(); | |
rect = new Rect(); | |
path = new Path(); | |
this.background = background; | |
} | |
public BorderDrawable() { | |
this(null); | |
} | |
public void setBackground(Drawable background) { | |
this.background = background; | |
} | |
public Drawable getBackground() { | |
return background; | |
} | |
@Override | |
public void draw(Canvas canvas) { | |
rect = copyBounds(); | |
tRect = copyBounds(); | |
tRect.left += mLeftBorderWidth; | |
tRect.right -= mRightBorderWidth; | |
tRect.top += mTopBorderWidth; | |
tRect.bottom -= mBottomBorderWidth; | |
setBounds(tRect); | |
if(background != null) | |
{ | |
background.setBounds(tRect); | |
background.draw(canvas); | |
} | |
setBounds(rect); | |
paint.setPathEffect(null); | |
paint.setStyle(Style.FILL_AND_STROKE); | |
paint.setAntiAlias(true); | |
paint.setStrokeWidth(0); | |
canvas.save(); | |
if(mLeftBorderWidth > 0) | |
{ | |
path.reset(); | |
paint.setColor(mLeftBorderColor); | |
path.moveTo(rect.left, rect.top); | |
path.lineTo(rect.left + mLeftBorderWidth, rect.top + mTopBorderWidth); | |
path.lineTo(rect.left + mLeftBorderWidth, rect.bottom - mBottomBorderWidth); | |
path.lineTo(rect.left, rect.bottom); | |
path.close(); | |
canvas.drawPath(path, paint); | |
} | |
if(mRightBorderWidth > 0) | |
{ | |
path.reset(); | |
paint.setColor(mRightBorderColor); | |
path.moveTo(rect.right, rect.top); | |
path.lineTo(rect.right - mRightBorderWidth, rect.top + mTopBorderWidth); | |
path.lineTo(rect.right - mRightBorderWidth, rect.bottom - mBottomBorderWidth); | |
path.lineTo(rect.right, rect.bottom); | |
path.close(); | |
canvas.drawPath(path, paint); | |
} | |
if(mTopBorderWidth > 0) | |
{ | |
path.reset(); | |
paint.setColor(mTopBorderColor); | |
path.moveTo(rect.left, rect.top); | |
path.lineTo(rect.left + mLeftBorderWidth, rect.top + mTopBorderWidth); | |
path.lineTo(rect.right - mRightBorderWidth, rect.top + mTopBorderWidth); | |
path.lineTo(rect.right, rect.top); | |
path.close(); | |
canvas.drawPath(path, paint); | |
} | |
if(mBottomBorderWidth > 0) | |
{ | |
path.reset(); | |
paint.setColor(mBottomBorderColor); | |
path.moveTo(rect.left, rect.bottom); | |
path.lineTo(rect.left + mLeftBorderWidth, rect.bottom - mBottomBorderWidth); | |
path.lineTo(rect.right - mRightBorderWidth, rect.bottom - mBottomBorderWidth); | |
path.lineTo(rect.right, rect.bottom); | |
path.close(); | |
canvas.drawPath(path, paint); | |
} | |
canvas.restore(); | |
} | |
public int getLeftBorderWidth() { | |
return mLeftBorderWidth; | |
} | |
public void setLeftBorderWidth(int mLeftBorderWidth) { | |
this.mLeftBorderWidth = mLeftBorderWidth; | |
} | |
public int getRightBorderWidth() { | |
return mRightBorderWidth; | |
} | |
public void setRightBorderWidth(int mRightBorderWidth) { | |
this.mRightBorderWidth = mRightBorderWidth; | |
} | |
public int getLeftBorderColor() { | |
return mLeftBorderColor; | |
} | |
public void setLeftBorderColor(int mLeftBorderColor) { | |
this.mLeftBorderColor = mLeftBorderColor; | |
} | |
public int getRightBorderColor() { | |
return mRightBorderColor; | |
} | |
public void setRightBorderColor(int mRightBorderColor) { | |
this.mRightBorderColor = mRightBorderColor; | |
} | |
public int getTopBorderWidth() { | |
return mTopBorderWidth; | |
} | |
public void setTopBorderWidth(int mTopBorderWidth) { | |
this.mTopBorderWidth = mTopBorderWidth; | |
} | |
public int getBottomBorderWidth() { | |
return mBottomBorderWidth; | |
} | |
public void setBottomBorderWidth(int mBottomBorderWidth) { | |
this.mBottomBorderWidth = mBottomBorderWidth; | |
} | |
public int getTopBorderColor() { | |
return mTopBorderColor; | |
} | |
public void setTopBorderColor(int mTopBorderColor) { | |
this.mTopBorderColor = mTopBorderColor; | |
} | |
public int getBottomBorderColor() { | |
return mBottomBorderColor; | |
} | |
public void setBottomBorderColor(int mBottomBorderColor) { | |
this.mBottomBorderColor = mBottomBorderColor; | |
} | |
public void setLeftBorder(int width, int color) | |
{ | |
setLeftBorderWidth(width); | |
setLeftBorderColor(color); | |
} | |
public void setTopBorder(int width, int color) | |
{ | |
setTopBorderWidth(width); | |
setTopBorderColor(color); | |
} | |
public void setRightBorder(int width, int color) | |
{ | |
setRightBorderWidth(width); | |
setRightBorderColor(color); | |
} | |
public void setBottomBorder(int width, int color) | |
{ | |
setBottomBorderWidth(width); | |
setBottomBorderColor(color); | |
} | |
@Override | |
public void setAlpha(int alpha) { | |
// TODO Auto-generated method stub | |
} | |
@Override | |
public void setColorFilter(ColorFilter cf) { | |
// TODO Auto-generated method stub | |
} | |
@Override | |
public int getOpacity() { | |
// TODO Auto-generated method stub | |
return 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment