2015-04-04 6 views
21

Я использую следующую форму в моем приложенииРяби на форме с прозрачным фоном

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
     <shape android:shape="oval" > 
      <solid android:color="@color/primary_light"/> 
      <size android:height="80dp" android:width="80dp"/> 
     </shape> 
    </item> 

    <item android:state_focused="true"> 
     <shape android:shape="oval"> 
      <stroke android:color="@color/primary_light" android:width="5dp"/> 
      <size android:height="80dp" android:width="80dp"/> 
     </shape> 
    </item> 

    <item> 
     <shape android:shape="oval"> 
      <solid android:color="@android:color/transparent"/> 
      <size android:height="80dp" android:width="80dp"/> 
     </shape> 
    </item> 
</selector> 

Он есть в моей вытяжке папки. Теперь я обновляю свое приложение на Lollipop, и я хочу дать обратную связь по круговой кнопке, которую я использовал. Так в drawable-v21 папке Я изменил его в пульсирующий селектор:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="@color/primary_light"> 
    <item> 
     <selector> 
      <item android:state_focused="true"> 
       <shape android:shape="oval"> 
        <stroke android:color="@color/primary_light" android:width="5dp"/> 
        <size android:height="80dp" android:width="80dp"/> 
       </shape> 
      </item> 

      <item android:id="@android:id/mask"> 
       <shape android:shape="oval"> 
        <solid android:color="@android:color/transparent"/> 
        <size android:height="80dp" android:width="80dp"/> 
       </shape> 
      </item> 
     </selector> 
    </item> 
</ripple> 

Но, к сожалению, пульсирующий эффект не генерируется с использованием выше вытяжки в леденце. Это из-за <solid android:color="@android:color/transparent"/>?

Может ли кто-нибудь показать мне, где я ошибся? Спасибо

+0

Если бы та же проблема с '<твердого андроида: цвет = "@ андроида: цвет/прозрачный"/> 'используется как маска в рябь. По-видимому, он не учитывает внутреннюю форму элемента, если он прозрачен. \ n Ваше решение использует '@android: color/white' вместо' transparent', и это то, что заставляет его работать на самом деле, я думаю. – John

ответ

44

После нескольких проб и ошибок, похоже, я неправильно понял иерархию selector и item.

Следующие работы прекрасно.

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="@color/primary_light"> 
     <item android:id="@android:id/mask"> 
       <shape android:shape="oval"> 
         <solid android:color="@android:color/white"/> 
         <size android:height="80dp" android:width="80dp"/> 
       </shape> 
     </item> 
</ripple> 
+3

спасибо, что ответили на ваш вопрос – defhlt

+2

Это не с прозрачным фоном .. Вам удалось установить пульсацию с прозрачным фоном? –

+2

@anoniim Он работает для прозрачного фона http://stackoverflow.com/questions/30215663/ripple-effect-in-pressed-state-transparency-in-normal-state/35906753#35906753 – thuongle

7

Это работает с прозрачным фоном:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="?android:colorControlHighlight" 
    android:exitFadeDuration="@android:integer/config_shortAnimTime"> 
<!-- Use this to define the shape of the ripple effect (rectangle, oval, ring or line). The color specified here isn't used anyway --> 
<item android:id="@android:id/mask"> 
    <shape android:shape="rectangle"> 
     <corners android:radius="3dp"/> 
     <!-- This color is needed to be set - doesn't affect anything --> 
     <solid android:color="@android:color/white"/> 
    </shape> 
</item> 
<!-- This is the background for your button --> 
<item> 
    <!-- Use the shape you want here --> 
    <shape android:shape="rectangle"> 
     <!-- Use the solid tag to define the background color you want --> 
     <solid android:color="@android:color/transparent"/> 
    </shape> 
</item> 
</ripple> 

Это был изменен немного от этого ответа: Transparent ripple

+0

Это то, что я ищу. Спасибо за этот ответ – AndEngine

1

Следующий код работает для пользовательской формы с волновым эффектом для прозрачной кнопки -

main_activity_buttons_ripple_with_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:color="#888888" 
    tools:targetApi="lollipop"> 

    <!-- Use this to define the shape of the ripple effect (rectangle, oval, ring or line). The color specified here isn't used anyway --> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <corners android:radius="25dp" /> 
      <!-- This color is needed to be set - doesn't affect anything --> 
      <solid android:color="#000" /> 
     </shape> 
    </item> 

    <!-- This is the background for your button --> 
    <item> 
     <!-- Use the shape you want here --> 
     <shape android:shape="rectangle"> 
      <!-- Use the solid tag to define the background color you want --> 
      <solid android:color="@android:color/transparent" /> 
      <stroke 
       android:width="1dp" 
       android:color="#FFF" /> 
      <corners android:radius="25dp" /> 
     </shape> 
    </item> 

</ripple> 

styles.xml

<style name="MainActivityButtonsStyle"> 
<item name="android:background">@drawable/main_activity_buttons_ripple_with_background</item> 
<item name="android:textAllCaps">false</item> 
<item name="android:layout_margin">15dp</item> 
<item name="android:paddingLeft">20dp</item> 
<item name="android:paddingRight">20dp</item> 
<item name="android:layout_centerHorizontal">true</item> 
<item name="android:layout_width">wrap_content</item> 
<item name="android:layout_height">50dp</item> 
<item name="android:textColor">#FFF</item> 
<item name="android:textSize">18sp</item> 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

     <Button 
      android:layout_alignParentTop="true" 
      style="@style/MainActivityButtonsStyle" 
      android:text="@string/button_search_by_id" /> 

    </RelativeLayout> 

</LinearLayout>