2015-09-14 2 views
1

У меня есть элемент списка в режиме просмотра, и я хочу получить эффект пульсации по всему элементу - в настоящее время мой GIF перекрывает рябь. Я не знаю, как это исправить, уже пробовал много способов после исследования, но ничего не получилось.Эффект пульсации Android, перекрываемый imageView/GIF

example of the non working ripple effect

Вот конкретный XML-файл, на основе которого я строю каждый элемент списка.

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
android:background="@drawable/selector" 
android:clickable="false"> 

<pl.droidsonroids.gif.GifTextView 
    android:layout_width="84dp" 
    android:layout_height="84dp" 
    android:paddingTop="3dp" 
    android:paddingBottom="3dp" 
    android:paddingRight="1dp" 
    android:paddingLeft="1dp" 
    android:background="@drawable/a_present_for_you" 
    /> 

<TextView 
    android:id="@+id/textView" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:textColor="@color/black" 
    android:textSize="16sp" 
    android:gravity="center_vertical" 
    android:drawableRight="@drawable/ic_lock_open_blue_24dp" 
    android:drawablePadding="16dp"> 
</TextView> 

</LinearLayout> 

Любые идеи?

ответ

4

Как насчет использования FrameLayout? Оберните эти два элемента с помощью FrameLayout вместо LinearLayout и установите android:foreground этого макета с помощью пользовательского селектора.

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

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
android:foreground="@drawable/selector"> 

<pl.droidsonroids.gif.GifTextView 
android:layout_width="84dp" 
android:layout_height="84dp" 
android:paddingTop="3dp" 
android:paddingBottom="3dp" 
android:paddingRight="1dp" 
android:paddingLeft="1dp" 
android:background="@drawable/a_present_for_you" 
/> 

<TextView 
android:id="@+id/textView" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:textColor="@color/black" 
android:textSize="16sp" 
android:gravity="center_vertical" 
android:drawableRight="@drawable/ic_lock_open_blue_24dp" 
android:drawablePadding="16dp"> 
</TextView> 

</FrameLayout> 
+0

Просто протестировано, отлично работает! Но в конце концов я пошел с тем, чтобы позволить gif перекрывать рябь, потому что я понял, что она выглядит довольно хорошо в правильном контексте. – dabo

+0

@ david145 Удивительный! Рад слышать, что это сработало! –

0

Эффект пульсации не распространяется, поскольку у вас есть два разных фона в одном LinearLayout. То, что вы можете попытаться сделать, задает эффект пульсации для всего LinearLayout.

+0

Да, я думаю, что это проблема, но я не могу показать gif по-другому. Попробовал это с помощью 'android: drawableLeft =" @ drawable/a_present_for_you "вместо' android: background = "@ drawable/a_present_for_you", но он все еще перекрывается. Что вы имеете в виду именно для установки LinearLayout? Думал, что я сделал это, установив 'android: background =" @ drawable/selector "' сверху. – dabo

+0

Можете ли вы разместить свой код 'drawable/selector'? –

+0

' <элемент андроид: идентификатор =" @ андроид: идентификатор/маска "> <цвета андроид: цвет =" @ андроид: цвет/белая»/> ' – dabo

1

Просто используйте эти следующие атрибуты: -

android:background="?attr/selectableItemBackground" для простого волнового эффекта. Для эффекта округлой пульсации android:background="?attr/selectableItemBackgroundBorderless"

внутри основного корня.

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