网格布局动画不起作用

3

我试图为GridLayout启动GridLayoutAnimation,但它没有起作用。请看下面的代码:

public class LayoutActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout);
        GridLayout layout = (GridLayout) findViewById(R.id.gridLayout);
        GridLayoutAnimationController anim = (GridLayoutAnimationController) AnimationUtils.loadLayoutAnimation(this, R.anim.grid_layout_animation);
        layout.setLayoutAnimation(anim);
        layout.startLayoutAnimation();
    }

}

文件 res/anim/grid_layout_animation.xml

<?xml version="1.0" encoding="utf-8"?>
<gridLayoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
        android:animation="@android:anim/fade_in"
        android:columnDelay="10%"
        android:direction="right_to_left"
        android:directionPriority="row" >
</gridLayoutAnimation>

启动后发生了异常:

java.lang.ClassCastException: android.view.animation.LayoutAnimationController$AnimationParameters cannot be cast to android.view.animation.GridLayoutAnimationController$AnimationParameters

有什么问题吗?

更新:添加了完整的堆栈跟踪

FATAL EXCEPTION: main
java.lang.ClassCastException: android.view.animation.LayoutAnimationController$AnimationParameters cannot be cast to android.view.animation.GridLayoutAnimationController$AnimationParameters
at android.view.animation.GridLayoutAnimationController.getDelayForView(GridLayoutAnimationController.java:299)
at android.view.animation.LayoutAnimationController.getAnimationForView(LayoutAnimationController.java:321)
at android.view.ViewGroup.bindLayoutAnimation(ViewGroup.java:3523)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2749)
at android.view.View.getDisplayList(View.java:12407)
at android.view.View.getDisplayList(View.java:12453)
at android.view.View.draw(View.java:13182)
at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
at android.view.View.draw(View.java:13461)
at android.widget.FrameLayout.draw(FrameLayout.java:467)
at android.view.View.getDisplayList(View.java:12409)
at android.view.View.getDisplayList(View.java:12453)
at android.view.View.draw(View.java:13182)
at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
at android.view.View.getDisplayList(View.java:12407)
at android.view.View.getDisplayList(View.java:12453)
at android.view.View.draw(View.java:13182)
at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
at android.view.View.draw(View.java:13461)
at android.widget.FrameLayout.draw(FrameLayout.java:467)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2470)
at android.view.View.getDisplayList(View.java:12409)
at android.view.View.getDisplayList(View.java:12453)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1168)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2149)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2021)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1832)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
at android.view.Choreographer.doCallbacks(Choreographer.java:555)
at android.view.Choreographer.doFrame(Choreographer.java:525)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4965)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
at dalvik.system.NativeStart.main(Native Method)

请在logcat中发布完整的堆栈跟踪。 - pskink
你使用GLAC构造函数时会发生这种情况吗?我的意思是从Java代码中创建控制器。 - pskink
我尝试从代码中创建GLAC,但是收到了相同的结果。 - alexmedv
尝试最简单的情况:从代码中创建GridView并使用setContentView(gv)。 - pskink
1个回答

0
问题是GridLayoutAnimationController需要它自己的AnimationParameters,它不能被转换为类。它的基类是LayoutAnimationController,但视图组需要它自己的单独的AnimationParameters。必须按照以下方式进行操作:
 GridLayoutAnimationController.AnimationParameters anim = (GridLayoutAnimationController.AnimationParameters)(/** Fill Id of Layout or View on which you want to apply the animation **/);

在这里阅读更多相关内容:https://proandroiddev.com/enter-animation-using-recyclerview-and-layoutanimation-part-2-grids-688829b1d29b - Radu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接