#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);
}