java.lang.RuntimeException:未知布局动画名称:set



我正在尝试设置一个动画。代码编译得很好,但应用程序在启动后崩溃,显示以下错误;

java.lang.RuntimeException: Unknown layout animation name: set

在我添加动画之前,我无法真正弄清楚问题出在哪里。我将链接整个Logcat、XML动画和HomeFragment(应用动画的地方(。我在开发者文档方面碰碰运气,但这对我没有帮助。。。那么我能做些什么来解决这个问题呢?谢谢你的帮助。

Logcat

10-30 22:08:30.011 26013-26013/com.example.login E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.login, PID: 26013
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.login/com.example.login.HomeActivity}: java.lang.RuntimeException: Unknown layout animation name: set
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2464)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2524)
at android.app.ActivityThread.access$900(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1391)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:234)
at android.app.ActivityThread.main(ActivityThread.java:5526)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.RuntimeException: Unknown layout animation name: set
at android.view.animation.AnimationUtils.createLayoutAnimationFromXml(AnimationUtils.java:198)
at android.view.animation.AnimationUtils.createLayoutAnimationFromXml(AnimationUtils.java:173)
at android.view.animation.AnimationUtils.loadLayoutAnimation(AnimationUtils.java:154)
at com.example.login.ui.home.HomeFragment.init(HomeFragment.java:64)
at com.example.login.ui.home.HomeFragment.onCreateView(HomeFragment.java:48)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
at androidx.fragment.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2646)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2416)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2372)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2466)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1483)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:620)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1238)
at android.app.Activity.performStart(Activity.java:6302)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2427)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2524) 
at android.app.ActivityThread.access$900(ActivityThread.java:154) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1391) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:234) 
at android.app.ActivityThread.main(ActivityThread.java:5526) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

HomeFragment

public class HomeFragment extends Fragment {
private HomeViewModel homeViewModel;
Unbinder unbinder;
@BindView(R.id.recycler_popular)
RecyclerView recycler_popular;
@BindView(R.id.viewpager)
LoopingViewPager viewPager;
LayoutAnimationController layoutAnimationController;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
homeViewModel = ViewModelProviders.of(this).get(HomeViewModel.class);
View root =inflater.inflate(R.layout.fragment_home,container,false);
unbinder= ButterKnife.bind(this,root);
init();
homeViewModel.getPopularList().observe(this,popularCategoryModels ->{
//Create Adapter
MyPopularCategoriesAdapter adapter=new MyPopularCategoriesAdapter(getContext(),popularCategoryModels);
recycler_popular.setAdapter(adapter);
recycler_popular.setLayoutAnimation(layoutAnimationController);
});
homeViewModel.getBestDealList().observe(this,bestDealModels -> {
MyBestDealsAdapter adapter = new MyBestDealsAdapter(getContext(),bestDealModels,true);
viewPager.setAdapter(adapter);
});
return root;
}
private void init() {
layoutAnimationController= AnimationUtils.loadLayoutAnimation(getContext(),R.anim.layout_item_from_left);
recycler_popular.setHasFixedSize(true);
recycler_popular.setLayoutManager(new LinearLayoutManager(getContext(),RecyclerView.HORIZONTAL,false));
}
@Override
public void onResume(){
super.onResume();
viewPager.resumeAutoScroll();
}
@Override
public void onPause(){
viewPager.pauseAutoScroll();
super.onPause();
}
}

item_animation_from_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1500">
<translate
android:fromXDelta="-100%"
android:toYDelta="0"
android:interpolator="@android:anim/decelerate_interpolator"/>
<alpha
android:fromAlpha="0"
android:toAlpha="1"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>

layout_item_from_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1500">
<translate
android:fromXDelta="-100%"
android:toYDelta="0"
android:interpolator="@android:anim/decelerate_interpolator"/>
<alpha
android:fromAlpha="0"
android:toAlpha="1"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>

当您使用AnimationUtils.loadLayoutAnimation时,您需要这样定义您的xml:

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation
xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/slide_in_bottom_groupviews"
android:animationOrder="normal"
android:delay="20%"
/>

换句话说,您需要使用xml中的layoutAnimation标记,然后可以在那里加载动画。

本文中的更多信息:https://proandroiddev.com/enter-animation-using-recyclerview-and-layoutanimation-part-1-list-75a874a5d213

最新更新