【问题标题】:Android L -- Play Ripple Effect on ViewAndroid L -- 在视图上播放波纹效果
【发布时间】:2014-10-13 23:06:32
【问题描述】:

我正在尝试在特定时间(而不是在被触摸的视图上)在视图上播放涟漪效果(来自 Android L)。 具体来说,当用户成功更改一些文本时,我希望某个视图发挥绿色涟漪效果以显示成功。有没有办法做到这一点?

我尝试将 RippleDrawable 放入动画中,将 RippleDrawable 作为“成功视图”的背景。但是,我无法弄清楚如何播放我所描述的波纹动画。

附:我的项目现在只有 Android L,所以我不担心向后兼容性。

【问题讨论】:

  • 只是猜测:(来自文档)The default touch feedback animations for buttons use the new RippleDrawable class, which transitions between different states with a ripple effect. 所以你可能想在 Drawable 上调用 setState 或类似的东西来触发效果。
  • @Budius 谢谢。可悲的是, int[] state = new int[] {android.R.attr.state_focused, android.R.attr.state_pressed}; view.getBackground().setState(state);没用。不过,这是个好主意。顺便说一句,我这样做对吗?
  • 你的波纹是如何定义的?

标签: android android-5.0-lollipop material-design rippledrawable


【解决方案1】:

由于您的蒙版只是一个实心矩形,您可以将波纹 XML 简化为:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:id="@android:id/mask" android:drawable="@android:color/white" />
    <item android:drawable="@drawable/file_item_selector"/>
</ripple>

您可以通过强制视图进入和退出按下状态来手动触发涟漪效果。

myView.setPressed(true);

// For a quick ripple, you can immediately set false.
myView.setPressed(false);

// Or for a long ripple, you can post to a handler.
myView.postDelayed(new Runnable() {
    public void run() {
        myView.setPressed(false);
    }
}, 500 /* delay in milliseconds */);

【讨论】:

  • 呸,不走运。那并没有产生涟漪。不过,谢谢你的想法。
  • 触摸视图时是否出现波纹?其他地方可能有问题。
  • 是的,当我触摸视图时,波纹显示得很好。
  • 很奇怪,这可能是 L 预览版中的一个错误——你能压缩一个最小的项目来重现这个问题,以便我可以检查我们的开发分支吗?
猜你喜欢
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
相关资源
最近更新 更多