相关疑难解决方法(0)

FEATURE_ACTIVITY_TRANSITIONS与FEATURE_CONTENT_TRANSITIONS

我在理解这两个Window标志之间的区别时遇到了一些麻烦,并且在每个标志需要使用时都不是100%肯定的.

文档Window.FEATURE_ACTIVITY_TRANSITIONS说:

允许活动通过发送或接收使用makeSceneTransitionAnimation(Activity, Pair[]) 或创建的ActivityOptions包来运行活动转换 makeSceneTransitionAnimation(Activity, View, String).

而文档Window.FEATURE_CONTENT_TRANSITIONS说:

用于请求窗口内容更改的标志应使用a进行动画处理TransitionManager.

TransitionManager使用设置 setTransitionManager(TransitionManager).如果未设置,TransitionManager则将使用默认值.

该文件指出,下列Window方法需要FEATURE_ACTIVITY_TRANSITIONS标志启用,但只字不提是否将FEATURE_CONTENT_TRANSITIONS启用的需求,以及(注意,根据源代码,FEATURE_ACTIVITY_TRANSITIONStrueFEATURE_CONTENT_TRANSITIONSfalse在默认情况下材料为主题的应用程序):

  • get{Enter,Exit,Return,Reenter}Transition()
  • set{Enter,Exit,Return,Reenter}Transition()
  • getSharedElement{Enter,Exit,Return,Reenter}Transition()
  • setSharedElement{Enter,Exit,Return,Reenter}Transition()
  • getTransitionBackgroundFadeDuration()
  • setTransitionBackgroundFadeDuration()

换句话说,基于此信息似乎FEATURE_ACTIVITY_TRANSITIONS是应用程序需要启用的功能标志,以便使用Lollipop的新活动转换API.然而,令我困惑的是,Android开发者网站上的这篇文章指出,FEATURE_CONTENT_TRANSITIONS为了实现自定义活动转换,需要启用它.

所以这是我的问题:

  1. 这两面旗帜有什么区别?在这种情况下,"活动过渡"和"内容过渡"之间有什么区别?
  2. 为什么默认FEATURE_ACTIVITY_TRANSITIONS启用和FEATURE_CONTENT_TRANSITIONS禁用?何时启用FEATURE_CONTENT_TRANSITIONS实际需要的标志?
  3. 感觉禁用FEATURE_ACTIVITY_TRANSITIONS和启用FEATURE_CONTENT_TRANSITIONS是否有意义?或者是否也FEATURE_CONTENT_TRANSITIONS需要FEATURE_ACTIVITY_TRANSITIONS启用?

谢谢!

android activity-transition shared-element-transition

43
推荐指数
1
解决办法
6571
查看次数

ActivityManagerProxy中的IllegalArgumentException

问题:ActivityA启动ActivityB,共享元素转换间歇性崩溃不一致可重现的Api级别:23,24和25

启动活动的代码:

Intent intent = new Intent(this, ActivityB.class);
Pair<View, String> logoTransition = Pair.create(logo, getString(R.string.transition_logo));
Pair<View, String> logoTextTransition = Pair.create(logoText, getString(R.string.transition_logo_text));
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, logoTransition, logoTextTransition);
ActivityCompat.startActivity(this, intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)

Stacktrace(API 23):

Exception java.lang.IllegalArgumentException:
android.os.Parcel.readException (Parcel.java:1606)
android.os.Parcel.readException (Parcel.java:1555)
android.app.ActivityManagerProxy.isTopOfTask (ActivityManagerProxy.java:4787)
android.app.Activity.isTopOfTask (Activity.java:5753)
android.app.Activity.cancelInputsAndStartExitTransition (Activity.java:4075)
android.app.Activity.startActivityForResult (Activity.java:4052)
android.app.Activity.startActivity (Activity.java:4312)
android.support.v4.content.ContextCompat.startActivity (ContextCompat.java)
__null__.getDrawable (ContextCompat.java)
__null__.isDeviceProtectedStorage (ContextCompat.java)
com.my.app.activity.ActivityA.startMainActivity (ActivityA.java)
Run Code Online (Sandbox Code Playgroud)

有谁知道这种行为的原因是什么?有什么建议的解决方案吗?

android android-activity

8
推荐指数
1
解决办法
3316
查看次数