【问题标题】:How to intent activity after the animation made with MotionLayout is finished?使用 MotionLayout 制作的动画完成后如何意图进行活动?
【发布时间】:2021-04-22 19:56:45
【问题描述】:

我在一个项目中使用了 MotionLayout。

问题是,当按钮被点击时,只能播放动画,并没有执行到下一个活动的转移。 OnClickListener 方法显然停止了!

有人对这个问题有合理的解决方案吗?

动态场景

 <Transition
        android:id="@+id/state3"
        app:constraintSetStart="@+id/next"
        app:constraintSetEnd="@id/nextLevel"
        app:duration="1000">
        <OnClick
            app:clickAction="transitionToEnd"
            app:targetId="@+id/btnNext" />
    </Transition>

JAVA


    @Override
    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.btnNext:

             startActivity(new Intent(MainActivity.this , LoginActivity.class));

             break;

        }
    }

【问题讨论】:

    标签: java android-animation onclicklistener android-transitions android-motionlayout


    【解决方案1】:

    MotionLayout 已经提供了获取动画进度更新的监听器。它被称为TransitionListener。它是一个监听TransitionLayout相关事件的监听器。

    代码如下:

    MotionLayout motionLayout = findViewById(R.id.motionLayout);
    
    motionLayout.addTransitionListener(new MotionLayout.TransitionListener() {
            @Override
            public void onTransitionStarted(MotionLayout motionLayout, int i, int i1) {
    
            }
    
            @Override
            public void onTransitionChange(MotionLayout motionLayout, int i, int i1, float v) {
    
            }
    
            @Override
            public void onTransitionCompleted(MotionLayout motionLayout, int i) {
                startActivity(new Intent(MainActivity.this , LoginActivity.class));
            }
    
            @Override
            public void onTransitionTrigger(MotionLayout motionLayout, int i, boolean b, float v) {
    
            }
        });
    

    【讨论】:

      【解决方案2】:

      如果您正在处理 onClick,则可以进行转换。 motionLayout.transitionToEnd()

      如果你想transtionToEnd 然后启动intent。 (在 2.1 中)

       @Override
      public void onClick(View v) {
      
          switch (v.getId()) {
      
              case R.id.btnNext:
                   motionLayout.transitionToEnd(() ->
                   startActivity(new Intent(MainActivity.this , LoginActivity.class));
              }
           }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        相关资源
        最近更新 更多