RippleDrawable – 以编程方式显示波纹效果

我有这样的观点

和ripple.xml一样

     

一切都很好。 当我触摸视图时,它会给我带来涟漪效应。 我正在寻找的是重复从代码开始视图上的波纹动画。 将其显示为不确定的进展。 波浪一直在荡漾。

就像是

  Runnable runnable = new Runnable() { @Override public void run() { RippleDrawable drawable = (RippleDrawable) button.getBackground(); drawable.showRipples(true, true); // <-- This is needed handler.postDelayed(runnable, 500); } }; 

知道怎么做吗?

RippleDrawable响应按下和聚焦状态,前者给出你正在寻找的波纹动画。 您可以使用View.setPressed(boolean)在主机视图上切换按下的状态。

 Runnable pressRunnable = new Runnable() { @Override public void run() { button.setPressed(true); button.postOnAnimationDelayed(unpressRunnable, 250); } }; Runnable unpressRunnable = new Runnable() { @Override public void run() { button.setPressed(false); button.postOnAnimationDelayed(pressRunnable, 250); } }; 

请记住,用户触摸Button也会切换按下的状态,因此您可能希望在OnTouchListener删除或重新发布runnable。

如果需要,您可以使用Drawable.setHotspot(float, float)控制纹波位置Drawable.setHotspot(float, float)或者在API 22 View.dispatchDrawableHotspotChanged(float, float)并传递视图相对(x, y)坐标。