Добавить границу к относительному макету во время выполнения в Android

#android #android-relativelayout

#Android #android-relativelayout

Вопрос:

Я хочу добавить границу со всех сторон к моему RelativeLayout во время выполнения. Я могу получить границу, однако она изменяет цвет фона макета. Если я установлю цвет фона на white , это также изменит цвет границы на белый. Как мне этого избежать?

Вот мой код ниже:

 private static void drawBorder(Context context, View layout){

    final RectShape rect = new RectShape();
    final ShapeDrawable rectShapeDrawable = new ShapeDrawable(rect);

    final Resources res = context.getResources();

    final Paint paint = rectShapeDrawable.getPaint();
    paint.setFlags(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.BLUE);
    paint.setStyle(Style.STROKE);
    paint.setStrokeWidth(10);

    layout.setBackgroundDrawable(rectShapeDrawable); //Testing on phone with API < 16

}
  

Спасибо.

Ответ №1:

Просто создайте XML-файл со следующим описанием границы

 <shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle">
<corners
  android:radius="2dp"
  android:topRightRadius="0dp"
  android:bottomRightRadius="0dp"
  android:bottomLeftRadius="0dp" />
<stroke
  android:width="1dp"
  android:color="@android:color/white" />
</shape>
  

и установите backgroundresource для представления с помощью этого чертежа

Комментарии:

1. Спасибо за ваш ответ. Однако я попробовал ваш метод, он рисует границу, но меняет цвет фона макета на серый. То же самое, что я получал в коде выше.

2. установите цвет заливки на прозрачный

Ответ №2:

Вы можете использовать это:

 private static Bitmap drawBitmapWithBorders(int width, int height, int borderWidth,
                                     int backgroundColor, int borderColor){
    int pixels[] = new int[width*height];
    Arrays.fill(pixels, borderColor);
    for(int i=borderWidth;i<height-borderWidth;i  ){
        Arrays.fill(pixels, i*width borderWidth, (i 1)*width-borderWidth, backgroundColor);
    }
    return Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888);
}