gpt4 book ai didi

android - 无需用户交互即可播放涟漪动画

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:34 28 4
gpt4 key购买 nike

我知道我可以将 android:background="?android:attr/selectableItemBackground" 设置为任何 View ,以获得来自 Android Lollipop 的漂亮波纹效果。这适用于被触摸的 View 用户。但是,如果我想在没有用户交互的情况下播放涟漪动画怎么办?

在我的应用程序中,我想通过在该 View 上播放波纹动画来引起对该 View 的注意。我怎样才能做到这一点?我没有找到一种方法来获取涟漪动画的 Animatior 对象。那么,如何在没有用户交互的情况下通过代码将波纹动画设置为 View ?

最佳答案

不幸的是,没有可用的方法来播放涟漪动画。但我可以想到两种可能的方法来实现这一目标

#1 使用反射

public static void simulateButtonPress(final View view)
{
Drawable drawable = view.getBackground();
if( drawable instanceof RippleDrawable )
{
try
{
final RippleDrawable rd = ((RippleDrawable)drawable);
final Method setRippleActive = rd.getClass().getDeclaredMethod("setRippleActive", boolean.class);
setRippleActive.setAccessible(true);
setRippleActive.invoke(rd, true); //setRippleActive(true)

//exit ripple effect after 250 milliseconds
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
try
{
setRippleActive.invoke(rd, false); //setRippleActive(false)
}
catch (Exception e)
{
e.printStackTrace();
}
}
}, 250);

}
catch (Exception e)
{
e.printStackTrace();
}
}
}

#2 通过模拟运动事件 ACTION_DOWN 和 ACTION_CANCEL

public static void simulateButtonPress(final View view)
{
final long now = SystemClock.uptimeMillis();
final MotionEvent pressEvent = MotionEvent.obtain(now, now, MotionEvent.ACTION_DOWN, view.getWidth()/2, view.getHeight()/2, 0);
view.dispatchTouchEvent(pressEvent);

new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
final long now = SystemClock.uptimeMillis();
final MotionEvent cancelEvent = MotionEvent.obtain(now, now, MotionEvent.ACTION_CANCEL, view.getWidth()/2, view.getHeight()/2, 0);
view.dispatchTouchEvent(cancelEvent);
}
}, 250);
}

关于android - 无需用户交互即可播放涟漪动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38996368/

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