gpt4 book ai didi

android - 是否有可能在android动画中获取当前帧数

转载 作者:行者123 更新时间:2023-11-30 00:55:11 26 4
gpt4 key购买 nike

我正在开发一个应用程序,我想在加载几帧后更改 TextView ,例如第一个 TextView 将是默认的,然后在加载 4 帧后 TextView 应该更改,然后在加载 9 帧后再次更改 TextView 应该更改.我该怎么做?

最佳答案

您可以通过覆盖 AnimationDrawable 类的 selectDrawable(int idx) 方法来实现。为此,您应该创建自定义类,它扩展 AnimationDrawable 声明接口(interface) OnFrameChangeListener 并在帧更改时引发 onFrameChanged() 方法,如下所示:

公共(public)类 ExtendedAnimationDrawable 扩展 AnimationDrawable {

public interface OnFrameChangeListener {
void onFrameChanged(int numOfFrame);
}

private OnFrameChangeListener mFrameChangeListener;

public ExtendedAnimationDrawable(AnimationDrawable aniDrawable) {
for (int i = 0; i < aniDrawable.getNumberOfFrames(); i++) {
this.addFrame(aniDrawable.getFrame(i), aniDrawable.getDuration(i));
}
}

public void setFrameChangeListener(OnFrameChangeListener frameChangeListener) {
this.mFrameChangeListener = frameChangeListener;
}

@Override
public boolean selectDrawable(int idx) {
boolean result = super.selectDrawable(idx);

if (mFrameChangeListener != null) {
mFrameChangeListener.onFrameChanged(idx);
}

return result;
}

你可以这样使用它:

View v ;

...

v.setBackgroundResource(R.drawable.animation_list);
ExtendedAnimationDrawable extendedAnimation = new ExtendedAnimationDrawable(
(AnimationDrawable) ContextCompat.getDrawable(context, R.drawable.animation_list));
extendedAnimation.setFrameChangeListener(new ExtendedAnimationDrawable.OnFrameChangeListener() {
@Override
public void onFrameChanged(int numOfFrame) {
// do your magic here
// for example
if (numOfFrame == 4) {
// change TextView #1
}
if (numOfFrame == 4 + 9) {
// change TextView #2
}
}
});

int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
v.setBackgroundDrawable(extendedAnimation);
} else {
v.setBackground(extendedAnimation);
}

extendedAnimation.start();

关于android - 是否有可能在android动画中获取当前帧数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289618/

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