2015-12-24 19 views
6

Próbujesz zrobić coś naprawdę prostego tutaj i znalazłeś kilka zasobów SO, ale bez skutku. Próbuję uzyskać efekt ripple na przycisku, który używa tła drawable typu shape drawable. Odpowiednie pliki:Efekt falowania w kształcie do rysowania

background_button:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <stroke 
     android:width="1px" 
     android:color="#80ffffff" /> 
    <solid android:color="@android:color/transparent" /> 
</shape> 

ripple.xml w folderze drawable-v21:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="?attr/colorControlHighlight"> 
    <item android:drawable="@drawable/background_button"/> 
</ripple> 

Button.xml:

<Button 
        android:id="@+id/login_button" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="20dp" 
        android:layout_weight="1" 
        android:paddingTop="10dp" 
        android:paddingBottom="10dp" 
        android:background="@drawable/ripple" 


/> 

Co jest nie tak? Dzięki!

Odpowiedz

8

Moja rada byłoby nie korzystać <ripple tag. Mam 2 powody: nie jest łatwo zrobić dokładnie to, co chcesz i musisz mieć 2 różne pliki .xml dla każdego tła. Nie lubię mieć folderu drawable-v21.

Moje rozwiązanie polega na owinięciu twojego Button przy użyciu FrameLayout i użycia atrybutu android:foreground. W ten sposób możesz uzyskać dowolne tło i możesz zachować efekt marszczenia.

<FrameLayout 
    android:id="@+id/login_button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="20dp" 
    android:layout_weight="1" 
    android:paddingTop="10dp" 
    android:paddingBottom="10dp" 
    android:foreground="?attr/selectableItemBackground"> 

    <Button 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/background_button"/> 
</FrameLayout> 

Zauważ, że przeniosłem wszystkie atrybuty i identyfikator FrameLayout. Powinieneś ustawić onClickListener na FrameLayout zamiast Button.

Btw, ?attr/selectableItemBackground jest świetny. Użyj go jak najwięcej. Zastępuje niebieski kolor Holo szarością dla starych urządzeń z Androida 4.0 do 4.3.

+0

To wydaje się przyzwoite rozwiązanie. Wypróbuję to i wkrótce wydam aktualizację. Dzięki! – user2511882

+0

To właśnie robię przez długi czas. Zapewnia spójność od poziomu 7 Api do 23. Mam nadzieję, że zadziała dla ciebie – tasomaniac

+0

Niestety., To nie działa. – user2511882

5

Spróbuj tego.

ripple_effect.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:color="#2797e0" 
tools:targetApi="lollipop"> 
<item android:id="@android:id/mask"> 
    <shape android:shape="rectangle"> 
     <solid android:color="#2797e0" /> 
    </shape> 
</item> 

button.xml

<Button 
       android:id="@+id/login_button" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="20dp" 
       android:layout_weight="1" 
       android:paddingTop="10dp" 
       android:paddingBottom="10dp" 
       android:background="@drawable/ripple_effect"/> 

build.gradle

compile 'com.android.support:appcompat-v7:23.1.1' 
+2

to zadziała, aczkolwiek prostokąt nie jest widoczny już – user2511882

+0

To działa! I, oczywiście, trzeba pamiętać, że sama fala używa kształtu ciągnącego się jak maska. Aby wyświetlić zarówno tętnienia, jak i kształt, można przejść do tła, a drugi do atrybutów pierwszego planu. – dominus

+0

To zadziałało, gdy usunąłem 'android: id =" @ android: id/mask "' from 'item' –

0

Pomoże

<com.abcd.ripplebutton.widget.RippleButton 
     android:id="@+id/Summit" 
     android:layout_width="260dp" 
     android:layout_height="50dp" 
     android:text="Login" 
     android:textColor="@color/white" 
     android:textStyle="bold" 
     app:buttonColor="@color/Button" 
     app:rippleColor="@color/white" /> 

Więcej Zobacz this

1

że pracuje dla mnie odkształcalne/rect.xml

<?xml version="1.0" encoding="utf-8"?> 

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview_background_shape"> 
    <stroke android:width="1dp" android:color="#FF4C71F5" /> 
    <padding android:left="0dp" 
     android:top="0dp" 
     android:right="0dp" 
     android:bottom="0dp" /> 
    <corners android:radius="5dp" /> 
    <solid android:color="#00000000" /> 

</shape> 

i tętnienia rozciągliwej/ODP.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="#f816a463" 
    tools:targetApi="lollipop"> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#f816a463" /> 
     </shape> 
    </item> 
</ripple> 

i dla przycisku

<Button 
       android:id="@+id/nm" 
       android:layout_width="80dp" 
       android:layout_height="40dp" 
       android:layout_weight="1" 
       android:background="@drawable/rect" 
       android:enabled="true" 
       android:text="@string/vnm" 
       android:textColor="@color/colorpr" 
       android:textStyle="bold" 
       android:foreground="@drawable/rip"/> 

nadzieję, że to pomaga !!!

1

To praca dla mnie ..

<?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="@color/smooth_white" 
    tools:targetApi="lollipop"> 
    <item android:drawable="@drawable/button_green_background" /> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/smooth_white" /> 
     </shape> 
    </item> 
</ripple> 

Chodzi o to sekcja

<item android:drawable="@drawable/button_green_background" /> 
Powiązane problemy