RippleDrawable - 以编程方式显示波纹效果
RippleDrawable - Show Ripple Effect programmatically
我有这样的看法
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:background="@drawable/ripple"
android:layout_centerVertical="true"
android:layout_alignParentStart="true" />
与ripple.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" />
</ripple>
一切正常。当我触摸视图时,它会给我涟漪效应。
我正在寻找的是从代码中重复启动视图上的涟漪动画。将其显示为不确定的进度。就这样波涛汹涌。
类似于
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
也会切换按下状态,因此您可能想要删除或重新 post 您在 OnTouchListener
中的可运行对象。
如果需要,您可以使用 Drawable.setHotspot(float, float)
或在 API 22+ 上 View.dispatchDrawableHotspotChanged(float, float)
并传递视图相关的 (x, y)
坐标来控制波纹位置。
我有这样的看法
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:background="@drawable/ripple"
android:layout_centerVertical="true"
android:layout_alignParentStart="true" />
与ripple.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" />
</ripple>
一切正常。当我触摸视图时,它会给我涟漪效应。 我正在寻找的是从代码中重复启动视图上的涟漪动画。将其显示为不确定的进度。就这样波涛汹涌。
类似于
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
也会切换按下状态,因此您可能想要删除或重新 post 您在 OnTouchListener
中的可运行对象。
如果需要,您可以使用 Drawable.setHotspot(float, float)
或在 API 22+ 上 View.dispatchDrawableHotspotChanged(float, float)
并传递视图相关的 (x, y)
坐标来控制波纹位置。