用于 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 的选择器