我有一个带有KenBurnsView和一个ImageView的布局(只是一个切换按钮)。当我单击按钮时,会生成一个纹波,但它会在KenBurnsView下方绘制。
以前,当我有一个Image视图替换KenBurnsView时,波纹在顶部ImageView上方绘制。
这是我的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
android:clickable="true"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_drawer_header_height">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.flaviofaria.kenburnsview.KenBurnsView
android:id="@+id/header_cover"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/cover_1" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/header_toggle"
android:layout_width="50dp"
android:layout_height="30dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
android:padding="10dp"
android:src="@drawable/toggle_down" />
</RelativeLayout>
</FrameLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/nav_toggle_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></RelativeLayout>
</LinearLayout>
这是我的涟漪可绘制XML:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@android:color/white"
android:drawSelectorOnTop="true"> <!-- ripple color -->
</ripple>
这就是我添加涟漪的方式:
toggle.setBackground(getResources().getDrawable(R.drawable.ripple));
这是什么问题造成的,原因是哪个波纹在KenBurnsView下方引起了波动?当用ImageView代替KenBurnsView时,它曾经可以完美地工作?
最佳答案
从您自己的代码('setBackground')中可以看到,您正在将涟漪设置为Background,这就是为什么在背景上绘制涟漪的原因。
android API 21上的ImageView为波纹android:drawSelectorOnTop="true"
添加了此“ hack”。但是您使用的库没有添加相同的hack。
您的代码本身没有错。但是,Android团队无法保证第三方库的这种行为。
您可以在此处根据清洁度,工作量和性能来选择一些选项:
检查ImageView源代码,克隆该库,并添加与imageview相同的hack,以解决问题。工作正常后,请确保将请求拉回到库中。
用FrameLayout包裹KenBurnsView
并在FrameLayout上使用setForeground
设置波纹。
克隆库,向可绘制的前景添加选项(类似于此How to set foreground attribute to other non FrameLayout view)。还要确保将请求此有价值的代码拉回到库中。