2013-06-19 2 views
3

У меня есть виджет с домашним экраном с линейным расположением. Я пытаюсь установить Alpha для фона во время выполнения, используя удаленные представления, но виджет не загружается.Настройка прозрачности для фона виджета

Я использую это:

remoteView.setFloat(R.id.widget_background, "setAlpha", (float)0.7); 

Настройка цвета фона или цвет текста таким же образом, работает. Как установить прозрачность фона с помощью удаленных представлений?

ответ

1

1.You может использовать Style.xml сделать Backgound прозрачным, как показано ниже:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.Transparent" parent="android:Theme"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
    </style> 
</resources> 

Установите этот файл в качестве темы вашего виджета. OR 2.Put 80 after # Введите свой цветовой код: # 80000000 Надеюсь, что это поможет. Вы можете использовать # 80FFFFFF для фона без какого-либо цвета. Я не пробовал его в коде, но может быть полезным.

+1

Но я хотел бы динамически менять прозрачность. Когда пользователь выбирает прозрачность (от 0 до 1), виджет обновляется. – domen

+1

Для этого вы можете использовать HashMap цветов, где цвет будет значением, а от 1 до 10 будет вашим ключом для этого, как второй вариант, который я дал в ответ. И установите цвет фона из этого ключа hashmap по выбору пользователя. вам нужен другой цветовой код в соответствии с прозрачностью. От черного до белого или любого другого, что вы хотите добавить. – AndiM

0
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:background="@android:color/transparent"> 


    <ImageView 
     android:id="@+id/widget_image" 
     android:layout_width="110sp" 
     android:layout_height="110sp" 
     android:layout_gravity="center" 
     android:src="@drawable/flashlight1" /> 
</LinearLayout> 

Просто установите фон макета на прозрачный. Добавьте ниже код. это сработало для меня.

android:background="@android:color/transparent" 
1

я использовал следующее решение:

float opacity = 0.3f;   //opacity = 0: fully transparent, opacity = 1: no transparancy 
int backgroundColor = 0x000000; //background color (here black) 
remoteView.setInt(R.id.loMain, "setBackgroundColor", (int)(opacity * 0xFF) << 24 | backgroundColor); 

loMain является основным макетом моего виджета

Если основной макет виджета использует форму фона (например, Android: фон = «@ drawable/shape_transparent»), который имеет закругленный угол, а затем это более сложное решение:

 float transparency = 0.5f; //0...1 
     long colorFilter = 0x01000000L * (long)(255f * transparency); 
     try { 
      final Method[] declaredMethods = Class.forName("android.widget.RemoteViews").getDeclaredMethods(); 
      final int len = declaredMethods.length; 
      if (len > 0) { 
       for (int m=0; m<len; m++) { 
        final Method method = declaredMethods[m]; 
        if (method.getName().equals("setDrawableParameters")) { 
         method.setAccessible(true); 
         method.invoke(remoteView, R.id.loMain, true, -1, (int)colorFilter, PorterDuff.Mode.DST_OUT, -1); 
         break; 
        } 
       } 
      } 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (InvocationTargetException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } 

Вы можете играть с переменными alfa и colorFilter в соответствии с вашими потребностями.

1

Существует простое решение, использующее цвет фона в шестнадцатеричном формате. У вас есть цвет, например, красный - #ff0000

установить фон красного для вашего приложения виджета, вы можете использовать:

widget.setInt(R.id.widget_list, "setBackgroundColor", Color.parseColor("#ff0000")); 

прозрачность цвета просто добавить в передней части вашего цвета, сколько цвета - прозрачность раппорт вы хотите, например:

на 20% цвет будет #20ff0000: enter image description here

на 85% цвет #85ff0000 wou'll есть: enter image description here

0

Set transparent background of an imageview on Android

Выше ссылки является лучшим решением для этого типа цвета фона.

Ниже код для черного: -

<color name="black">#000000</color> 

Теперь, если и хотите использовать непрозрачность, чем вы можете использовать ниже код: -

<color name="black">#99000000</color> 

ниже для кода непрозрачности: -

100% - FF

95% - F2

90% - Е6

85% - Д9

80% - CC

75% - BF

70% - B3

65% - A6

60% - 99

55% - 8C

50% - 80

45% - 73

40% - 66

35% - 59

30% 4D

25% - 40

20% - 33

15% - 26

10% - 1A

5% - 0D

0% - 00

Смежные вопросы