Есть два способа добиться этого: 1) добавить отступ для imageView и установить для него цвет фона.
final ImageView imageView = new ImageView(context);
imageView.setPadding(2*border,2*border,0,0);
final ViewGroup.MarginLayoutParams params = new ViewGroup.MarginLayoutParams(width,height);
params.leftMargin = marginYouWouldSet + border;
params.topMargin = marginYouWouldSet + border;
imageView.setBackgroundDrawable(drawable);
imageView.setBackgroundColor(borderColor);
addView(imageView, params);
2) другой вариант - переопределить метод рисования вашего вида, и тамНарисуйте границу:
@Override
protected void dispatchDraw(Canvas canvas)
{
borderDrawable.draw(canvas);
super.dispatchDraw(canvas);
}
...
public class BorderDrawable extends Drawable{
private Rect mBounds;
private Paint mBorderPaint;
public BorderDrawable(Rect bounds, int thickness, int color) {
mBounds = bounds;
mBorderPaint = new Paint();
mBorderPaint.setStrokeWidth(thickness);
mBorderPaint.setColor(color);
}
@Override
public void draw(Canvas canvas) {
//left border
canvas.drawLine(
mBounds.left - thickness/2,
mBounds.top,
mBounds.left - thickness/2,
mBounds.bottom,
mBorderPaint);
//top border
canvas.drawLine(
mBounds.left,
mBounds.top - thickness/2,
mBounds.right,
mBounds.top - thickness/2,
mBorderPaint);
//right border
canvas.drawLine(
mBounds.right + thickness/2,
mBounds.top,
mBounds.right + thickness/2,
mBounds.bottom,
mBorderPaint);
//bottom border
canvas.drawLine(
mBounds.left,
mBounds.bottom + thickness/2,
mBounds.right,
mBounds.bottom + thickness/2,
mBorderPaint);
}
}
Обратите внимание, что вы должны указать середину линии, которую хотите нарисовать (!). А также я не запускал и не компилировал это, поэтому я не на 100%конечно, это правильно, но это так :) Границы прямоугольника должны быть ограничивающим прямоугольником вашего вида - (0,0, ширина, высота).