2015-12-24 2 views
6

Попытка сделать что-то действительно простое здесь и посмотрела кучу SO ресурса, но безрезультатно. Я пытаюсь получить эффект пульсации на кнопке, которая использует фон drawable типа shape drawable. Соответствующие файлы:Эффект пульсации на фигуре можно сделать

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 в 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" 


/> 

Что здесь не так. Спасибо!

ответ

8

Мой совет был бы не использовать <ripple тег. У меня есть 2 причины: не так просто сделать то, что вы хотите, и у вас есть 2 разных файла .xml для каждого фона. Я не люблю иметь drawable-v21 папку.

Мое решение состоит в том, чтобы обернуть ваш ButtonFrameLayout и использовать атрибут android:foreground. Таким образом, вы можете иметь любой фон, который вы хотите, и вы можете сохранить эффект пульсации.

<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> 

Заметьте, что я переместил все атрибуты и идентификатор FrameLayout. Вы должны установить onClickListener в FrameLayout вместо Button.

Btw, ?attr/selectableItemBackground это здорово. Используйте его как можно больше. Он заменяет синий цвет Holo серым цветом для старых устройств с Android 4.0 до 4.3.

+0

Это похоже на достойное решение. Я попробую это и скоро опубликую обновление. Благодаря! – user2511882

+0

Вот что я делаю давно. Он обеспечивает согласованность с уровнями Api с 7 до 23. Надеюсь, это сработает для вас. – tasomaniac

+0

К сожалению, это не работает. – user2511882

5

Попробуйте это.

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

это работа, хотя и прямоугольник не виден больше – user2511882

+0

Это работает! И, конечно же, вы должны помнить, что сама пульсация использует форму, пригодную для маскировки. Таким образом, чтобы отобразить как рябь, так и фигуру, можно переходить в фоновый режим, а другой - в атрибуты переднего плана. – dominus

+0

Это сработало для меня, когда я удалил 'android: id =" @ android: id/mask "' from 'item' –

0

Это поможет

<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" /> 

подробнее см this

1

, который работает для меня вытяжки/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> 

и пульсация вытяжки/рип.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> 

и для кнопки

<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"/> 

надежда эта помощь !!!

1

Эта работа для меня ..

<?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> 

Точка является раздел

<item android:drawable="@drawable/button_green_background" /> 
Смежные вопросы