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)
坐标。