用于 Pre-Lollipop 设备的具有弯曲背景的 Android Ripple 按钮

Posted

技术标签:

【中文标题】用于 Pre-Lollipop 设备的具有弯曲背景的 Android Ripple 按钮【英文标题】:Android Ripple button with curved background for Pre-Lollipop devices 【发布时间】:2017-07-03 20:57:18 【问题描述】:

我需要按钮的波纹效果。目前,我正在使用 v21 目录中的 xml 为棒棒糖和向上设备中的按钮使用波纹背景,它工作正常,但我还需要棒棒糖前设备的波纹效果。

这是我的按钮。

我使用了一些自定义库来获取前棒棒糖设备的涟漪效果。例如,我通过关注how to create ripple effect for pre-lollipop 使用了com.balysv:material-ripple:1.0.2 库。他们在那里使用this library,它使用自定义视图来包装按钮。

所以当我将它用于棒棒糖前的弯曲形状按钮时,结果将是这样的......

如您所见,波纹效果超出了按钮笔划边界。有没有办法解决这个问题?

另外,有没有办法使用 android 的默认支持库而不是使用自定义 3rd 方库为前棒棒糖设备获得涟漪效应?

【问题讨论】:

没有支持库提供可在棒棒糖前设备上绘制的波纹 - 你必须使用第 3 方的 try this 感谢@shadygoneinsane。波纹效果在棒棒糖和向上的边界上运行良好。但是我们不能将涟漪用于棒棒糖之前的设备,因为涟漪效应伴随着棒棒糖的材料设计而来。所以我的观点是为棒棒糖设备前的弯曲形状按钮获得涟漪效果。 [如何为 pre-lollipop 创建波纹效果][3] 链接似乎已损坏.. 您能否编辑您的问题以粘贴您当前正在使用的库的链接!! 【参考方案1】:

没有。您没有使用支持库在 pre-lollipop 上产生波纹的选项。您可以使用this 库 - 易于使用。对操作系统进行检查,然后在需要时实现波纹。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
    // set layout background as ripple_drawable
 else 
    // Implement the 3rd party library

【讨论】:

感谢@Debdeep。即使这个也不能解决我的问题。涟漪效应在矩形中起作用。不在我们的自定义形状内。 您还可以做一个可选择的背景,您可以在其中更改颜色。为此,您可以将视图保留在 CardView 中,并在 CardView 上使用 android:foreground="?android:attr/selectableItemBackground" android:clickable="true" 对于其他视图,请查看评论 here 中的最后几行。这可能会有所帮助。 感谢@Debdeep。正如我之前所说,这不是用于棒棒糖和升级设备吗?我想要像 kitkat 这样的棒棒糖前设备的涟漪效应。【参考方案2】:

使用https://github.com/ozodrukh/RippleDrawable。

ripple.xml

<ripple xmlns:android="htp://schemas.android.com/apk/res/android"
android:color="yourRippleColor">
<!-- style for ripple -->
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<corners android:radius="yourButtonCornerRadius"/>
<solid android:color="#FF00FF"/>
</shape>
</item>
<!-- background -->
<item android:drawable="yourBackgroundForButton" />
</ripple>

Activity.java

Button bu=...;
bu.setBackground(LollipopDrawablesCompat.getDrawable(getResources(),R.drawable.ripple,getTheme());
bu.setOnTouchListener(new DrawableHotspotTouch((LollipopDrawable)bu.getBackground()));

在三星 Galaxy Advance Duos、android 4.4.2(api 19,KitKat) 上测试

【讨论】:

以上是关于用于 Pre-Lollipop 设备的具有弯曲背景的 Android Ripple 按钮的主要内容,如果未能解决你的问题,请参考以下文章

我的 Material Design ActionBar 或 Lollipop 设备中的 StatusBar 上没有显示颜色,但在 Pre-Lollipop 设备的 ActionBar 中显示。为啥?

在Pre-Lollipop设备中使用.xml向量时,应用程序崩溃Xamarin.Android

Lollipop RippleDrawable 与 Pre-Lollipop 的选择器

Media Session Compat 未在 Pre-Lollipop 上显示锁屏控件

无法使 Qmenu 背景弯曲

内框阴影是弯曲的