Articles of android transitions

如何知道一项活动是否在没有过渡的情况下开始?

我有一个用例,我主要通过转换启动一个活动,但从导航抽屉打开它时不是这种情况。 为了保持转换顺利,我有一个Transition.TransitionListener ,在转换完成后我会在其中触发一些UI更新。 所以我有这样的事情: public class SomeActivity extends Activity { public void onCreate(Bundle savedInstanceState){ // … if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition(); sharedElementEnterTransition.addListener(new Transition.TransitionListener() { // … @Override public void onTransitionEnd(Transition transition) { doSomeUiUpdating(); } }); } else { // Pre-Lollipop doSomeUiUpdating(); } } } 这在使用animation启动Activity时效果很好,但是如何知道Activity是否在没有转换的情况下启动,以便我可以调用doSomeUiUpdating() ? 我确信在Activity , Window , Transition或我忽略的某个地方必须有一个简单的方法。 […]

EnterTransitionCoordinator在Android 5.0中导致NPE

添加退出并输入活动转换到应用程序后,我收到崩溃报告,如下所示: 致命exception:java.lang.NullPointerException:尝试在android.view.ViewOverlay $ OverlayViewGroup.add(ViewOverlay.java)的空对象引用上调用虚拟方法’android.view.ViewParent android.view.View.getParent()’ 164)在Android.上的android.app.EnterTransitionCoordinition.startReservedAnimations(EnterTransitionCoordinator.java:598)上的android.view.View.Ev响应中的android.view.EtlayEnystions.startSharedElementTransition(EnterTransitionCoordinator.java:325)上的android.view.ViewGroupOverlay.add(ViewGroupOverlay.java:63)。 app.EnterTransitionCoordinator.access $ 200(EnterTransitionCoordinator.java:42)在Android.app的android.app.EnterTransitionCoordinition $ 5 $ 1.run(EnterTransitionCoordinator.java:389)android.app.ActivityTransitionCoordinition.startTransition(ActivityTransitionCoordinator.java:698)。在android.view.ViewRootImpl.performTraversa的android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)的EnterTransitionCoordinator $ 5.onPreDraw(EnterTransitionCoordinator.java:386) ls(ViewRootImpl.java:1985)位于android.view.ViewRoreIvers上的android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1077)$ traversalRunnable.run(ViewRootImpl.java:5845)android.view.Choreographer $ CallbackRecord.run (Choreographer.java:767)位于android.view.Choreographer的舞台上的android.view.Choreographer(dooreographer.java:580)的android.view.Choreographer(Choreographer.java:570)。 java:753)在android.os.Handler.handleCallback(Handler.java:739)的android.os.Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:135)at android.app.ActivityThread.main(ActivityThread.java:5272)位于com.android的java.lang.reflect.Method.invoke(Method.java)java.lang.reflect.Method.invoke(Method.java:372) .internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:909)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 它不可重复,但崩溃计数很重要。 做了一些研究,我发现这个提交表明它(实际上)是Android中的一个内部错误: https : //android.googlesource.com/platform/frameworks/base/+/83c692efd3c53050fce132dfd2ef21763d3cf010%5E%21/#F0 所有崩溃报告都是5.0,5.0.1或5.0.2。 因为5.1有更广泛的传播,但没有显示崩溃,似乎EnterTransitionCoordinator在5.1中得到修复。 因此,一种可能的解决方案是检查API级别22或更高级别,然后只进行转换。 不过我想知道是否有更好的方法; 一些解决方法可能,尽管这似乎是Android的内部问题(堆栈中的所有系统类)?

未执行活动转换(Lollipop)

我正在制作活动X和活动Y之间的过渡动​​画。 X包含带有图像的列表,单击图像时会展开并在活动Y中 “缩放”。 因此,此图像是X和Y之间的共享元素。 我在XML布局中设置了transitionName属性。 这是启动活动Y的代码: ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, clickedImage, clickedImage.getTransitionName()); startActivityForResult(intent, OPEN_PICTURE_REQUEST, options.toBundle()); 直到这里,一切正常。 但是,我还想在输入时为活动Y的布局设置animation。 为此,我在XML文件(picture_enter.xml)中定义了转换: 最后,在活动Y的创建中,我将过渡初始化: TransitionInflater inflater = TransitionInflater.from(this); Transition transition = inflater.inflateTransition(R.transition.picture_enter); Window window = getWindow(); window.setEnterTransition(transition); 但这从未执行过。 只有图像的“缩放”效果才能正常工作。 我也尝试过以编程方式定义转换。 有什么建议么?

退出转换前更新源活动

我需要有关活动之间转换的帮助: 我有两个活动A和B,并且都有一个具有相同图像列表的ViewPager。 每个页面都有一个ImageView,其transitionName等于image_x,其中x是页面索引。 A启动活动B调用ActivityOptionsCompat.makeSceneTransitionAnimation并且输入转换完全正常。 问题如下:当我关闭活动B时,退出转换不会在B的相同位置初始化活动A的视图寻呼机。 当用户关闭B时,后者在结果中设置当前页面位置。 在活动A的onActivityResult中,我调用setCurrentItem ,行为显示在gif中。 有没有办法在退出转换开始之前更新活动A?

平滑的幻灯片图像单向

我有一个对称的图像,我想从右到左顺利地移动它。 我试图使用TranslateAnimation,但首先我必须正确设置我的图像这是非常困难的主要是因为这个图像使用所有屏幕宽度,我应该设置负边距。 还有其他解决方案吗? 是否有可能在不移动ImageView的情况下移动图像?

Android棒棒糖共享元素转换闪烁/闪烁

我在Lollipop的共享元素转换中看到奇怪的事情。 共享元素在开始制作animation之前就会闪烁(请参阅videohttps://www.youtube.com/watch?v=DCoyyC_S-9A ) 我不知道为什么会这样。 然而,当我将false到我的主题时,我看不到闪烁,但过渡看起来并不好(看起来只有一半是animation的后半部分animation’隐’)。 其他过渡设置: true true true true @android:transition/move @android:transition/move 我正在使用ActivityCompat和ActivityOptionsCompat开始活动: ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(ActivityMain.this, new Pair(playButton, getString(R.string.translation_control_button)), new Pair(findViewById(R.id.playerImage), getString(R.string.translation_artwork))); ActivityCompat.startActivity(this, pendingIntent, options.toBundle()); 第一项活动: 第二项活动: include_mini_player.xml fragment_mini_player: 你有什么想法为什么会这样吗?

替换片段具有错误的高程值

你好再次堆栈溢出。 我有另一个片段问题。 (我正在使用android.app.Fragment而不支持片段) 我正在尝试更换片段。 但这不像使用那么简单: fragmentTransaction .replace(containerId, newFragment) .addToBackStack(“unique tag”) .commit() 为什么不? 好朋友,这是因为我的newFragment有一个过渡animation。 animation在哪里定义? 另一个很棒的问题,它在片段onCreateAnimator()中定义 为什么在那里定义? 可以find原因的长答案: 嵌套片段转换不正确 。 现在你需要相信这就是我的项目需要做的事情。 animation是做什么的? 从屏幕边缘到其中心的简单滚动,完全覆盖原始片段。 请记住,在这种情况下,旧片段只是坐在原地。 它具有不移动的animation效果。 问题是什么? 问题是newFragment似乎比旧版本具有更低的高程(或z?)值。 因此,无法观察到过渡,因为旧片段位于新片段上方。 到达animation持续时间结束时,您会看到新片段在旧片段上方闪烁。 我期望newFragment从animation开始就覆盖旧版本。 为什么不使用添加? 这似乎会产生更多问题,因为我有很多片段要交换进出视图。 使用add似乎会在下次使用replace时触发它们的退出animation,即使前面有1 … n个片段。 他们也不会停顿。 为什么不设置高程? 因为我支持没有提升属性的api 19。 为什么不对api 19使用ViewCompat.setElevation()? 我尝试了它并且有相同的失败结果。 有没有人find解决这个问题的方法?

使用Transition从Fragment启动活动(API 21支持)

我正在尝试将Android应用程序移植到新的支持库(support-v4:21.0.0),并且我无法通过转换从Fragments启动活动。 在我的活动中,我一直在做类似的事情: Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(this).toBundle(); ActivityCompat.startActivityForResult(this, intent, REQUEST_SOMETHING, options); 适用于活动。 但是,如果我尝试使用Fragments做类似的事情,例如: Activity activity = getActivity(); Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity).toBundle(); ActivityCompat.startActivityForResult(activity, intent, REQUEST_SOMETHING, options); 事实certificate,没有为Fragment调用onActivityResult() ,而只调用封闭的Activity。 我没有在支持库中find任何东西将Bundle作为parameter passing给实际Fragment上的startActivityForResult()并让它回调到该Fragment中的onActivityResult() 。 这可能吗? 最简单的解决方案是处理Activity本身中的所有onActivityResult()调用,但我宁愿不这样做,因为我有大量可能正在接收回调的片段。 感谢帮助。 谢谢!

如何使用DrawerLayout打开活动时删除延迟?

我有一个带有DrawerLayout的活动但是无论什么时候它打开都有一个延迟,就像分秒,屏幕是白色的,然后画出我的屏幕。 转换结束后会发生这种情况。 所以它看起来像屏幕animation过渡是跳跃。 在用ButterKnife绑定视图后,我尝试将它放在我的OnCreate上,但它没有做任何事情。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { postponeEnterTransition(); drawerLayout.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @TargetApi(Build.VERSION_CODES.LOLLIPOP) public boolean onPreDraw() { drawerLayout.getViewTreeObserver().removeOnPreDrawListener(this); startPostponedEnterTransition(); return true; } }); } 是的我正在为Lollipop优化它,对于pre-Lollipop设备我使用overridePendingTransitions ,它运行正常。 我的问题只在Lollipop设备上。 顺便说一句,我的Enter和Exit转换都是在xml中定义的fade_in_out并在styles指定 @color/pink false true true true true @transition/fade_in_out_transition @transition/fade_in_out_transition @transition/change_clip_bounds @transition/change_clip_bounds stateAlwaysHidden|adjustResize

如何在Android中提供自上而下的animation?

当我进入下一个活动时,我能够给出自下而上的animation,但现在当我按下时,我使用相同的代码从上到下animation给出animation,但它总是自下而上,所以我的问题是如何给animation我在Android设备上按下按钮后从上到下? 请在下面find我的代码。 我在使用Intent从一个Activity转换到另一个Activity使用它。 overridePendingTransition( R.anim.slide_in_up, R.anim.slide_out_up ); 和xml是:slide_in_up.xml 和slide_out_up.xml是