Полупрозрачный AppWidget?

У меня есть AppWidget, где макет имеет LinearLayout в корне. Виджет использует фоновый 9-патч, чтобы обеспечить рамку для виджета.

Как установить альфа-канал в виджете?

Я не могу установить его напрямую, поскольку атрибут фона используется для указания 9-патча. Это LinearLayout, а не ImageView, поэтому я не могу использовать setAlpha(), так как мне сделать его полупрозрачным?

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


person Ollie C    schedule 13.05.2011    source источник
comment
set alpha доступен в суперклассе linear layout. у вас возникли проблемы с использованием этой функции   -  person Sunil Pandey    schedule 13.05.2011
comment
Я должен был упомянуть две вещи. Во-первых, мне нужно установить прозрачность в виджете, поэтому я использую RemoteViews. Во-вторых, я поддерживаю платформу 5 и выше. Я начинаю задаваться вопросом, единственный ли способ сделать это — использовать статический полупрозрачный 9-патч :(   -  person Ollie C    schedule 14.05.2011


Ответы (3)


См. ответы на Как установить альфа-значение всего представления на уровне API 7 (Android 2.1)

person Micah Hainline    schedule 13.05.2011
comment
Я не думаю, что это сработает, так как мне нужно установить альфу в представлении виджета, и я не могу получить к нему прямой доступ. - person Ollie C; 14.05.2011

Насколько я вижу, единственный способ сделать это - использовать полупрозрачный рисунок (возможно, 9-патч), поскольку, похоже, нет способа сделать это через RemoteViews.

person Ollie C    schedule 29.08.2011

Вы можете динамически установить прозрачность в RemoteViews на Android 2.2 и более поздних версиях, используя изображение для отображения фона и используя метод setAlpha изображения.

Используйте относительный макет, чтобы расположить представление изображения за содержимым, и в представлении изображения установите src на ваше фоновое изображение. Обратите внимание, что я устанавливаю для изображения значение src, а не фон, поэтому я могу использовать метод setAlpha.

Расположение:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/MainLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/BackgroundImageView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_margin="6dip"
            android:cropToPadding="true"
            android:scaleType="fitXY"
            android:src="@drawable/widget_background" >
        </ImageView>

        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/ContentLinearLayout"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="fill"
            android:layout_marginBottom="26dip"
            android:layout_marginLeft="14dip"
            android:layout_marginRight="14dip"
            android:layout_marginTop="14dip"
            android:clickable="true"
            android:clipChildren="false"
            android:clipToPadding="false"
            android:gravity="top|fill_horizontal"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/TextView01"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:gravity="center"
                android:text="loading..."
                android:textSize="18dip"
                android:textStyle="bold" >
            </TextView>
        </LinearLayout>

    </RelativeLayout>

Когда вы создаете RemoteViews для отображения в виджете, вы можете использовать общий метод setInt для доступа к методу setAlpha в ImageView следующим образом:

setInt(R.id.BackgroundImageView, "setAlpha", alpha);

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

setImageViewResource(R.id.backgroundImageView, bgDrawable);
person Brian    schedule 10.01.2012