Java 如何从活动结束时收听乐蒂动画
我有一个包含片段的活动。 这个片段有一个带有lottie_loop=“false”的lottie动画, 这意味着,一旦动画完成第一个循环,动画将是和 我想在包含此片段的活动中侦听此事件(动画结束),但我的代码有一些错误,并且我有白色屏幕 我为listen-to-even创建了接口,下面是我的代码: 乐蒂动画片段:Java 如何从活动结束时收听乐蒂动画,java,android,lottie,Java,Android,Lottie,我有一个包含片段的活动。 这个片段有一个带有lottie_loop=“false”的lottie动画, 这意味着,一旦动画完成第一个循环,动画将是和 我想在包含此片段的活动中侦听此事件(动画结束),但我的代码有一些错误,并且我有白色屏幕 我为listen-to-even创建了接口,下面是我的代码: 乐蒂动画片段: public class EntryFragmentAnimation extends Fragment { private View view; private L
public class EntryFragmentAnimation extends Fragment {
private View view;
private LottieAnimationView mLavTwoHearts;
private boolean isAnimationEnd = false;
private OnAnimationEndListener iOnAnimationEndListener;
public interface OnAnimationEndListener {
void onAnimationEnd(boolean isAnimationEnd);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_entry_animation, container, false);
initView(view);
initAnimation();
return view;
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
try {
iOnAnimationEndListener = (OnAnimationEndListener) getActivity();
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement OnAnimationEndListener");
}
}
private void initView(View view) {
mLavTwoHearts = view.findViewById(R.id.lavTwoHearts);
}
private void initAnimation() {
mLavTwoHearts.playAnimation();
mLavTwoHearts.addAnimatorListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
isAnimationEnd = true;
iOnAnimationEndListener.onAnimationEnd(isAnimationEnd);
}
});
}
}
和一项活动
public class LoginActivity extends AppCompatActivity implements EntryFragmentAnimation.OnAnimationEndListener {
private boolean isAnimationEnd = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
setEntryScreen();
listenToAnimationEnd();
}
private void setEntryScreen(){
getSupportFragmentManager()
.beginTransaction()
.add(R.id.container_login_fl, new EntryFragmentAnimation())
.commit();
}
private void listenToAnimationEnd(){
while (!isAnimationEnd){
Log.d(TAG, "listenToAnimationEnd: Animation playing");
}
Log.d(TAG, "listenToAnimationEnd: animation end");
}
@Override
public void onAnimationEnd(boolean isAnimationEnd) {
this.isAnimationEnd = isAnimationEnd;
}
}
运行应用程序时,只会出现白色屏幕,并且在logcat中运行无休止的日志,播放动画,我建议您最好使用。您只需要创建ViewModel类并在fragment中创建其实例,但要使用activity作用域,以便它可用于活动中包含的所有片段,包括活动本身 在片段中创建一个共享ViewModel实例,如下所示:
activity?.let {
sharedViewModel = ViewModelProviders.of(it).get(SharedViewModel::class.java)
}
动画结束后,更新ViewModel
sharedViewModel?.onAnimationFinished()
注意:在ViewModel类中,有任何活动正在观察的实时数据成员,然后只需更新函数中的变量即可
在活动中,我们只需要创建ViewModel的实例,并像这样观察所需的数据
val sharedViewModel = ViewModelProviders.of(this).get(SharedViewModel::class.java)
sharedViewModel.animationEndEvent.observe(this, Observer {
it?.let {
// do some thing
}
})
你为什么想听没完没了的日志?你为什么不在onAnimationStart中标记起点,然后一直听到animationEnd?我不想听没完没了的日志,这个日志只适合我,我的目标是听动画结束,向活动报告,并对活动采取行动