gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:23:13 25 4
gpt4 key购买 nike

我有这样的看法

<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>

一切正常。当我触摸 View 时,它会给我涟漪效应。我正在寻找的是从代码中重复启动 View 上的涟漪动画。将其显示为不确定的进度。所以海浪不停地荡漾。

有点像

 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 中的可运行对象。

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

关于java - RippleDrawable - 以编程方式显示波纹效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29057803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com