Reputation: 470
I would like to add a black border around a custom ImageView. Currently I am using this class to implement rounded top corners in the ImageView:
public class RoundedBitmapDisplayer implements BitmapDisplayer {
private Context ctx;
public RoundedBitmapDisplayer(Context context) {
this.ctx = context;
}
@Override
public Bitmap display(Bitmap bitmap, ImageView imageView) {
Bitmap roundBitmap;
try {
roundBitmap = getRoundedCornerBitmap(ctx, bitmap, 10, bitmap.getWidth(), bitmap.getHeight(),
false, false, true, true);
} catch (OutOfMemoryError e) {
Log.e(ImageLoader.TAG, "Can't create bitmap with rounded corners. Not enough memory.", e);
roundBitmap = bitmap;
}
imageView.setImageBitmap(roundBitmap);
return roundBitmap;
}
/*
private Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(0xFFFFFFFF);
canvas.drawRoundRect(rectF, roundPixels, roundPixels, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}*/
public static Bitmap getRoundedCornerBitmap(Context context, Bitmap input, int pixels , int w , int h , boolean squareTL, boolean squareTR, boolean squareBL, boolean squareBR ) {
Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final float densityMultiplier = context.getResources().getDisplayMetrics().density;
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, w, h);
final RectF rectF = new RectF(rect);
//make sure that our rounded corner is scaled appropriately
final float roundPx = pixels*densityMultiplier;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
//draw rectangles over the corners we want to be square
if (squareTL ){
canvas.drawRect(0, 0, w/2, h/2, paint);
}
if (squareTR ){
canvas.drawRect(w/2, 0, w, h/2, paint);
}
if (squareBL ){
canvas.drawRect(0, h/2, w/2, h, paint);
}
if (squareBR ){
canvas.drawRect(w/2, h/2, w, h, paint);
}
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(input, 0,0, paint);
return output;
}
}
Upvotes: 2
Views: 3545
Reputation: 7619
Create image_border.xml file in drawable
<gradient
android:angle="270">
</gradient>
<stroke
android:width="2dp"
android:color="#3b64a8" />
<corners
android:radius="2dp" />
<padding
android:left="1dp"
android:top="1dp"
android:right="1dp"
android:bottom="1dp" />
and use this xml in your imageview xml entry
<ImageView android:id="@+id/image"
android:background="@drawable/image_border" <!--add xml like this-->
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/image" />
Upvotes: 0
Reputation: 133560
You can draw lines in canvas. Make sure you pass the right co-ordinates. In onDraw()
Paint bp= new Paint();
bp.setColor(Color.RED);//set a color
bp.setStrokeWidth(5);// set your stroke width
// w and h are width and height of your imageview
canvas.drawLine(0, 0, w, 0,bp);
canvas.drawLine(0, 0, 0, h,bp);
canvas.drawLine(w,h,w,0,bp);
canvas.drawLine(w, h, 0,h , bp);
Upvotes: 4
Reputation: 2622
You can set the background xml drawable that contain <stroke />
Upvotes: 0