首先,我的状态栏背景设置为深棕色,导航栏背景为默认黑色.我正在使用Material light主题.
我正在使用ActivityOptions.makeSceneTransitionAnimation默认转换启动一个新活动,我注意到状态和导航栏都会短暂淡化为白色然后再返回正确的颜色.
根据文件:
要获得转换的完整效果,必须在调用和被调用的活动上启用窗口内容转换.否则,调用活动将开始退出转换,但随后您将看到窗口转换(如缩放或淡入淡出)
我正在使用getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);调用和被调用的活动.
同样,如果我将输入转换更改为幻灯片,状态和导航栏会短暂地具有带白色背景的幻灯片转换.
如何在活动场景动画过渡期间阻止状态栏和导航栏动画?
android android-5.0-lollipop activity-transition shared-element-transition
我使用来自棒棒糖的新共享元素在两个活动之间实现了图像转换.它正在工作但是在转换过程中我在整个屏幕上都出现了一个奇怪的白色闪烁,我找不到如何摆脱它.这是一个例子:

以下是第二个活动的启动方式
public static void launch(
@NonNull Activity activity, @NonNull View transitionView, Game game) {
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(
activity, transitionView, game.gameFullId);
Intent intent = new Intent(activity, ListImportationLoginActivity.class);
intent.putExtra(INTENT_EXTRA_GAME, retailer);
ActivityCompat.startActivity(activity, intent, options.toBundle());
}
Run Code Online (Sandbox Code Playgroud)
然后在onCreate:
ViewCompat.setTransitionName(mLogoView, mGame.gameFullId);
Run Code Online (Sandbox Code Playgroud)
和主题文件:
<resources>
<style name="Theme.MyApp.NoActionBar" parent="Theme.MyApp.NoActionBar.Base">
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
<item name="android:windowSharedElementExitTransition">@android:transition/move</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
我在理解这两个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_TRANSITIONS是true和FEATURE_CONTENT_TRANSITIONS是false在默认情况下材料为主题的应用程序):
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为了实现自定义活动转换,需要启用它.
所以这是我的问题:
FEATURE_ACTIVITY_TRANSITIONS启用和FEATURE_CONTENT_TRANSITIONS禁用?何时启用FEATURE_CONTENT_TRANSITIONS实际需要的标志?FEATURE_ACTIVITY_TRANSITIONS和启用FEATURE_CONTENT_TRANSITIONS是否有意义?或者是否也FEATURE_CONTENT_TRANSITIONS需要FEATURE_ACTIVITY_TRANSITIONS启用?谢谢!
我想在从一个Activity转到另一个Activity时设置共享元素转换.
第一个Activity有一个包含项目的RecyclerView.单击某个项目时,该项目应为新活动设置动画.
所以我在最终活动视图上设置了android:transitionName ="item",以及recycleler-view项目视图.
我还在进行下一个活动时使用此代码:
this.startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, itemView, "boomrang_item").toBundle());
Run Code Online (Sandbox Code Playgroud)
单击某个项目时,它会正确转换并显示新视图.真的很好.但是当我点击后退按钮时.有时它工作正常,但大多数时候我的活动崩溃与下面的堆栈跟踪:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.transformMatrixToGlobal(android.graphics.Matrix)' on a null object reference
at android.view.GhostView.calculateMatrix(GhostView.java:95)
at android.app.ActivityTransitionCoordinator$GhostViewListeners.onPreDraw(ActivityTransitionCoordinator.java:845)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1956)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?它看起来像android 5中的一个bug
android android-animation activity-transition shared-element-transition android-recyclerview
我试图在片段之间进行共享元素转换,当使用replace()添加第二个片段时一切正常,但是在代码库add()中使用了很多,但是当使用它时,转换只是跳到结束值
是否有可能在添加的片段之间进行转换? 谢谢
@Override
public void onClick(View v) {
setSharedElementReturnTransition(TransitionInflater.from(getActivity())
.inflateTransition(android.R.transition.move));
FragmentB secondFragment = new FragmentB();
secondFragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity())
.inflateTransition(android.R.transition.move));
getFragmentManager().beginTransaction()
.add(R.id.container, secondFragment)
.addToBackStack(null)
.addSharedElement(imageView, imageView.getTransitionName())
.commit();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用前Lollipop设备(4.x)上的共享元素进行活动转换.可能吗?到目前为止,我正在尝试这个:
public class RewardDetail extends ActionBarActivity {
@Override
public void onCreate(final Bundle savedInstanceState) {
...
ViewCompat.setTransitionName(imageView, TRANSITION_NAME);
}
...
public static void launch(ActionBarActivity activity, View transitionView, WelcomeReward detailData) {
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, TRANSITION_NAME);
Intent intent = new Intent(activity, RewardDetail.class);
intent.putExtra(PARAM_DATA, detailData);
ActivityCompat.startActivity(activity, intent, options.toBundle());
}
}
Run Code Online (Sandbox Code Playgroud)
叫做:
@Override
public void onClick(final View v) {
int position = recyclerView.getChildPosition(v);
WelcomeReward welcomeReward = data.get(position);
RewardDetail.launch(WelcomeRewardActivity.this, v.findViewById(R.id.reward_view), welcomeReward);
}
Run Code Online (Sandbox Code Playgroud)
但它导致"常规"转换(没有共享元素).有任何想法吗?
编辑
根据这段视频,可以做到:
https://www.youtube.com/watch?v=RhiPJByIMrM&index=8&list=WL
是否有一个图书馆已经为棒棒糖前实现了这个?
java android material-design activity-transition shared-element-transition
我正在尝试在两个活动之间进行共享元素转换.
第一个活动有一个圆形图像视图,第二个活动有一个矩形图像视图.我只是想让圆圈从第一个活动过渡到第二个活动,在那里它变成一个正方形,当我按回时它回到圆圈.
我发现转换不是那么整洁 - 在下面的动画中,您可以看到矩形图像视图似乎减小了大小,直到它与圆的大小相匹配.方形图像视图会瞬间出现,然后出现圆圈.我想摆脱方形图像视图,以便圆圈成为过渡的终点.
我已经创建了一个小测试回购,你可以在这里下载:https://github.com/Winghin2517/TransitionTest
我的第一个活动的代码 - imageview位于MainFragment我的第一个活动中:
public class MainFragment extends android.support.v4.app.Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_view, container,false);
final ImageView dot = (ImageView) view.findViewById(R.id.image_circle);
Picasso.with(getContext()).load(R.drawable.snow).transform(new PureCircleTransformation()).into(dot);
dot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(getContext(), SecondActivity.class);
View sharedView = dot;
String transitionName = getString(R.string.blue_name);
ActivityOptionsCompat transitionActivityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), sharedView, transitionName);
startActivity(i, transitionActivityOptions.toBundle());
}
});
return view;
} …Run Code Online (Sandbox Code Playgroud) android whatsapp picasso android-transitions shared-element-transition
我TextView在我的活动中有A.我如何TextView从活动A和CollapsingToolbarLayout.setTitle()活动B 的标题进行共享元素转换?
有没有办法id从CollapsingToolbarLayout源代码中获取标题视图?
感谢帮助!
android android-transitions android-toolbar shared-element-transition android-collapsingtoolbarlayout
我Shared Element Transitions在活动之间工作.转换工作正常,但我想知道共享元素转换何时结束,以便我可以显示其他内容.
我尝试onSharedElementEnd在SharedElementCallback我转换到的活动中使用in ,但在转换开始之前调用它.
还有我可以听的另一个回调吗?
我正在努力使应用程序更具实质性,而我只是坚持如何实现一些共享元素转换.我有一个活动A,它启动另一个B然后调用finish()以便从后栈中删除它.在我的情况下,我有一个我想在两个活动之间分享的元素,但是一旦它从A传递到B,A就不再重要了.如果我在startActivity(ctx,intent,bundle)之后没有调用finish(),则退出/输入动画效果很好.但是,如果我打电话给完成,那么在动画开始之前会有一个非常丑陋的闪烁.
我有什么东西可以忽略,或者是不可能做我想做的事情?
java android activity-finish android-5.0-lollipop shared-element-transition