我有一个带有高程的圆角矩形,可以投射阴影,就像这里的例子一样:http://developer.android.com/preview/material/views-shadows.html#shadows
这是我的形状:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/white" />
<corners android:radius="6dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
我希望获得其他所有内容的漂亮"涟漪"触摸效果,但是如果将其设置为视图的背景,则不会给出触摸反馈.形状保持白色.
所以,我把它变成了layer-list:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/white" />
<corners android:radius="6dp" />
</shape>
</item>
<item android:drawable="?android:selectableItemBackground" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)
现在,当我点击它时,我得到了很好的触摸反馈,但是有一个问题.
圆角矩形的轮廓丢失了.它仍然可以将白色圆角矩形绘制得很精细,但是阴影会被渲染为非圆角矩形(方形边缘),并且波纹会一直延伸到角落之外:

它在这里看起来并不太可怕,但在设备上它非常丑陋和令人反感.
有没有办法来解决这个问题?Outline第一个链接的部分似乎是我想要的,但我无法弄清楚如何实现它.
我正在观察Android中按钮上的涟漪动画错误.基本上,我有一个ViewGroup,称它为ButtonContainer,包含2个按钮,称之为OkButton和CancelButton.当用户点击CancelButton时,我想通过将其可见性设置为GONE来隐藏ButtonContainer.但这会导致副作用,即CancelButton上的波纹动画排队,但从未播放,并且下次ButtonContainer变为可见时播放.这似乎发生是因为按钮的OnClickListener在波纹动画有机会播放之前被触发.本文描述了这个确切的错误,并显示了视图的确切行为:链接
笔者提出一个解决办法,但我想知道,有没有办法有OnClickListener被解雇后上的按钮波纹动画的播放?
最小SDK为21。当我在回收适配器中单击cardview时,不会发生波纹效应,而是转到下一个屏幕。recyclerview位于片段中。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:id="@+id/entire_card"
android:layout_width="match_parent"
android:layout_height="265dp"
android:layout_margin="8dp"
android:foreground="?android:attr/selectableItemBackground"
app:cardUseCompatPadding="true"
app:cardCornerRadius="2dp"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:paddingTop="120dp"
android:visibility="visible"/>
<ImageView
android:id="@+id/pet_image"
android:layout_width="match_parent"
android:layout_height="210dp"
android:layout_alignParentTop="true"
android:scaleType="centerCrop"
android:src="@drawable/placeholder"
android:visibility="gone"
/>
<TextView
android:id="@+id/pet_description"
android:layout_width="fill_parent"
android:layout_height="55dp"
android:layout_below="@+id/pet_image"
android:padding="10dp"
android:textColor="#FFFFFF"
android:visibility="gone"
android:textSize="20sp"
android:background="@color/primaryColour"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
每个项目都有我的onClick的适配器代码。
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView petInfo;
public ImageView imgURL;
public ProgressBar progressBar;
private Context itemContext;
public ViewHolder(View v){
super(v);
imgURL = …Run Code Online (Sandbox Code Playgroud)