为啥进入动画在新线程中不起作用?
Posted
技术标签:
【中文标题】为啥进入动画在新线程中不起作用?【英文标题】:Why entering animation is not working in new thread?为什么进入动画在新线程中不起作用? 【发布时间】:2018-04-16 04:00:28 【问题描述】:从新线程启动 Activity 时,Entry Transition 动画不起作用。
new Thread(new Runnable()
@Override
public void run()
Intent listIntent = new Intent(HomeFragment.this.getActivity(),
ListActivity.class);
listIntent.putExtra(getString(R.string.type_id), data.get(i).getType_id());
listIntent.putExtra(getString(R.string.translation_title), data.get(i).getTranslate_type());
startActivity(listIntent);
getActivity().overridePendingTransition(R.anim.slide_up, R.anim.fade_in);
).start();
但过渡动画在 ui 线程中有效。为什么进入动画在新线程中不起作用?
【问题讨论】:
【参考方案1】:你只需使用这个:
Handler h = new Handler();
h.postDelayed(new Runnable()
@Override
public void run()
Intent listIntent = new Intent(HomeFragment.this.getActivity(),
ListActivity.class);
listIntent.putExtra(getString(R.string.type_id), data.get(i).getType_id());
listIntent.putExtra(getString(R.string.translation_title), data.get(i).getTranslate_type());
startActivity(listIntent);
getActivity().overridePendingTransition(R.anim.slide_up, R.anim.fade_in);
, 100);
编码愉快!!
【讨论】:
谢谢哥们。它正在工作 :) 你能告诉我为什么它的行为很奇怪吗? "new Thread" 在您的调用中被视为创建一个不是主线程的新线程(无法启动新活动)正如此答案中所修复的那样,使用处理程序将在线程中运行你称之为(可能是 UI 线程)【参考方案2】:您对启动新活动的调用被视为 UI 部分,请仅在 UI 线程中执行,
由于启动新活动将占据您的整个屏幕,因此暂停旧动画可能是更好的解决方案,因为用户无论如何都看不到您的动画
【讨论】:
感谢您的回答。我会执行的。【参考方案3】:为什么要创建一个单独的线程来创建一个活动?
Intent intent = new Intent( getContext(), ListActivity.class);
startActivity(intent);
【讨论】:
我的 UI 线程正在做动画。在 UI 线程中创建活动时,动画卡顿!这就是为什么我要找一个新线程。以上是关于为啥进入动画在新线程中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个 CSS3 动画在 Safari 和 Chrome 中不起作用?