2017-07-19 60 views
0

我是Android编程的新手。我想给卡片视图添加连锁效果。实际上我找到了解决方案,但是,在触摸cardview元素后,效果似乎并未覆盖整个cardview。我的意思是效果突然消失,并没有达到cardview的边缘。 这我得到的结果如下:如何在“完整”cardview中添加纹波效果android

enter image description here

虽然我想是这样的一个张贴在此blog post

这是我想尽了办法:

cardview_item.xml

<android.support.v7.widget.CardView 
     android:layout_width="match_parent" 
     style="@style/MyCardViewStyle" 
     android:layout_height="280dp" 
     android:id="@+id/appletCard" 
     app:cardBackgroundColor="@color/cardDefaultBg" 
     android:clickable="true" 
     android:foreground="@drawable/ripple_effect" 
     > 

     //Some TextViews here ... 

</android.support.v7.widget.CardView> 

这是ripple_effect.xml在绘制-V21包:

<ripple 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:color="?android:attr/colorControlHighlight"> 
<item 
    android:id="@android:id/mask" 
    android:drawable="@android:color/white"/> 
</ripple> 

如果重要,我使用支持库。

+0

涟漪不一定会走到边缘 – tyczj

+0

那么是否有解决方案,使他们去边缘? @tyczj –

回答

0

您应该将mask应用于您的涟漪。试试这个:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="?android:attr/colorControlHighlight"> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#000000" /> 
      <corners android:radius="@dimen/card_corner_radius" /> 
     </shape> 
    </item> 
</ripple> 
+0

它不起作用:( –

+0

@inverted_index,那么你应该考虑使用第三方库或者在用户触摸一张卡片时自己编写涟漪动画。查找示例lib [here](https:// github。 com/traex/RippleEffect) –

+0

由于我在应用程序中使用了很多库,我没有导入无用库的倾向,但是在这种情况下编写我自己的涟漪动画是个好主意:)谢谢。 @ArtyomDorosh –

0

可以使用Android默认的涟漪效应与"?attr/selectableItemBackground"

  <android.support.v7.widget.CardView 
       android:id="@+id/appletCard" 
       android:layout_width="match_parent" 
       android:layout_height="280dp" 
       style="@style/MyCardViewStyle" 
       android:clickable="true" 
       android:foreground="?attr/selectableItemBackground" 
       app:cardBackgroundColor="@color/cardDefaultBg"> 


      </android.support.v7.widget.CardView> 

或创建自定义

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true"> 
     <shape 
      android:shape="rectangle"> 
      <solid android:color="@color/RippleColor" /> 
     </shape> 
    </item> 

    <item android:state_pressed="true"> 
     <shape 
      android:shape="rectangle"> 
      <solid android:color="@color/RippleColor" /> 
     </shape> 
    </item> 

    <item> 
     <shape 
      android:shape="rectangle"> 
      <solid android:color="@color/backColor" /> 
     </shape> 
    </item> 
</selector> 

如果希望效果达到边缘,使用this library,为您提供OnRippleCompleteListener,所以你可以等到它完成效果并到达边缘

+0

是的,我知道我可以使用默认的纹波效果。但问题不在于此。我想让(甚至是强制)效果继续荡漾到cardview的边缘。不幸的是,默认的涟漪效应不能提供它。 –

+0

@inverted_index编辑了我的答案 – SiSa

0

在检查为他们的UI元素使用涟漪效应的类似应用程序之后,我发现效果在不同版本的Android中发生了变化。我正在寻找的情况是在棒棒糖Android设备中使用的。所以当我在API 25(Nogut)上运行模拟器时,我没有得到期望的结果。

谢谢大家的回复。