Подтвердить что ты не робот

Изменение цвета границы формы во время выполнения

У меня есть эта форма в моей доступной папке:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="5dp" />
    <solid android:color="#ffffff" />
    <stroke android:width="2dp" android:color="#B5B5B5"/>
</shape>

Определите прямоугольник с закругленными углами, и я могу применить его как фон к любой панели, например: android: background = "@drawable/round_corner_shape" .

Здесь возникает вопрос: у меня мало панелей на моем приложении, с той же формой, что и фон, но для каждой фигуры я хочу другой цвет границы (штриха). Я не хочу создавать 3 фигуры, единственное отличие от цвета штриха. Можно ли изменить во время выполнения значение хода?

4b9b3361

Ответ 1

У меня была та же проблема. В моем случае у меня был GridView, который элементы в сетке могли бы изменить цвет границы пользователем во время выполнения.

Итак, в gridviewAdapter для этой сетки я сделал следующее в методе getView (тот, который генерирует представление для адаптера)

public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    convertView = inflater.inflate(R.layout.griditem, null);
    GradientDrawable gradientDrawable = (GradientDrawable) convertView.getBackground(); 

    gradientDrawable.setStroke(2, mColor); 
    convertView.invalidate();
    return convertView;
}

mColor - это int, который представляет цвет, как и в xml файлах. В java-коде вместо "#" мы используем "0x" для определения его в формате AARRGGBB. Например, используйте 0xFF000000 для 100% непрозрачного BLACK и 0xFF0000FF для 100% непрозрачного голубого. Объясняя это здесь, так как google api "полезно" говорит, что цвет int - это "цвет штриха".

Это решило мою проблему... Я думаю, вы можете попробовать что-то похожее для своего дела.

Ответ 2

Привет, вы можете попробовать создать свой фон во время выполнения, тогда вы можете изменить его, когда захотите.

RoundRectShape rect = new RoundRectShape(
  new float[] {30,30, 30,30, 30,30, 30,30},
  null,
  null);
ShapeDrawable bg = new ShapeDrawable(rect);
bg.getPaint().setColor(0x99FFFFFF);
view.setBackgroundDrawable(bg);