【问题标题】:How to change activity after 5 seconds?如何在 5 秒后更改活动?
【发布时间】:2015-05-16 05:48:00
【问题描述】:

我用我的个人标志做了一个索引活动。 我希望在 5 秒后更改活动。 所以我准备了2个布局,我运行启动器。 在我设置的启动器活动中:

Intent intent = new Intent(Home.this, IndexActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        startActivity(intent);
        finish();

问题是该活动在白色活动中保持阻塞状态,并且在 5 秒后更改活动。

我做错了吗?

如何创建淡入淡出动画?我该如何运行它?谢谢

【问题讨论】:

标签: android android-animation


【解决方案1】:

你不应该阻塞主线程。它负责更新 UI,如果你阻止它,用户界面将冻结。

改为使用Handler 及其postDelayed 方法。

【讨论】:

    【解决方案2】:

    首先在你的动画文件夹中声明它。

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:fillAfter="true" >
    
        <alpha
            android:duration="1000"
            android:fromAlpha="0.0"
            android:interpolator="@android:anim/accelerate_interpolator"
            android:toAlpha="1.0" />
    
    </set>
    

    然后在你要去的地方在 acitivity 的 java 文件中声明一个动画:

        Animation animfadein,animFadeout;
         animFadein = AnimationUtils.loadAnimation(getApplicationContext(),
                        R.anim.fade_in);  
    animFadeout = AnimationUtils.loadAnimation(getApplicationContext(),
                        R.anim.fade_out);  
    

    然后在startActivity(Intent);之后

    overridePendingTransition(animFadein, animFadeout);

    这里是淡出:

    fade_out.xml
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:fillAfter="true" >
    
        <alpha
            android:duration="1000"
            android:fromAlpha="1.0"
            android:interpolator="@android:anim/accelerate_interpolator"
            android:toAlpha="0.0" />
    
    </set>
    

    【讨论】:

      【解决方案3】:

      Thread.sleep() 会降低性能。您可以使用Handler 类的postDelayed() 方法来执行此操作:

      Handler mHandler = new Handler();
      mHandler.postDelayed(new Runnable() {
      
          @Override
          public void run() {
              Intent intent = new Intent(Home.this, IndexActivity.class);
              intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
              startActivity(intent);
              finish();
          }
      
      }, 5000L);
      

      【讨论】:

      • "Thread.sleep() 会降低性能" -> 不是真的,它做了它应该做的。
      • @2Dee nah,这不是让任何线程等待的有效方法。处理程序要好得多。
      • 您能解释一下为什么您认为 Thread.sleep() 不是“让任何线程等待的有效方法”吗?我找不到任何东西来支持这种说法......
      • @2Dee 我也在寻找一个我读过的链接来发布你。 2 或 3 位经验丰富的人已经在 SO 上告诉我不要使用 Thread.sleep(),其中一个也给我发了一个链接。找到后我会告诉你的。
      • 是的,我就是这么想的,你不明白你在做什么。 Commonsware 的回答基本上说,如果您需要执行后台操作并完成 UI 工作,则使用 postDelayed 比创建背景线程更有效。他从不暗示 Thread.sleep 会导致性能问题。而且您对 Thread.suspend 的定义也不正确,请参阅tutorialspoint.com/java/java_thread_control.htmdeveloper.android.com/reference/java/lang/Thread.html#resume()。你只是在这里让自己难堪......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      相关资源
      最近更新 更多