Форма фона виджетов приложений для Android программно меняет непрозрачность цвета

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

Теперь я пытаюсь изменить непрозрачность фона, не теряя закруглений.

Я знаю, что RemoteViews довольно ограничены.

Сейчас я использую этот код: views.setInt(R.id.root_layout_widget, "setBackgroundColor", ColorUtils.setAlphaComponent(Color.WHITE, opacity))

Но так я теряю закругленные углы. Если бы я не использовал RemoteViews, я бы получил фон элемента и установил его альфа-канал.

Мой корневой элемент - это LinearLayout, а мой фоновый рисунок выглядит следующим образом:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@android:color/white" />
    <corners android:radius="2dp" />
</shape>

Знаете ли вы какие-либо способы сделать это? Спасибо


person Luca    schedule 07.09.2018    source источник


Ответы (3)


Вы можете попробовать этот код

int transparency = 192;(the amount of opacity level you want to give)

views.setInt(R.id.root_layout_widget, "setBackgroundColor", transparency);

в месте

views.setInt(R.id.root_layout_widget, "setBackgroundColor", ColorUtils.setAlphaComponent(Color.WHITE, opacity))
person Sana    schedule 07.09.2018
comment
Нет, это не работает. Я отредактировал сообщение, если это может помочь. - person Luca; 07.09.2018

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

person ScouseChris    schedule 07.09.2018

Чтобы решить эту проблему, я удалил фон из своего корневого LinearLayout и поместил ShapeDrawable в ImageView и изменил свой макет следующим образом:

До:

<LinearLayout
  android:background="@drawable/round_corners">
    .....
    .....
</LinearLayout>

После:

<FrameLayout>
    <ImageView
        android:id="@+id/background"
        android:src="@drawable/round_corners"/>
    <LinearLayout>
        .....
        .....
    </LinearLayout>
</FrameLayout>

И чтобы изменить непрозрачность фона, не теряя круглых углов:

remoteViews.setInt(R.id.background, "setImageAlpha", alpha)
person Luca    schedule 06.06.2021