首先,我的状态栏背景设置为深棕色,导航栏背景为默认黑色.我正在使用Material light主题.
我正在使用ActivityOptions.makeSceneTransitionAnimation
默认转换启动一个新活动,我注意到状态和导航栏都会短暂淡化为白色然后再返回正确的颜色.
根据文件:
要获得转换的完整效果,必须在调用和被调用的活动上启用窗口内容转换.否则,调用活动将开始退出转换,但随后您将看到窗口转换(如缩放或淡入淡出)
我正在使用getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
调用和被调用的活动.
同样,如果我将输入转换更改为幻灯片,状态和导航栏会短暂地具有带白色背景的幻灯片转换.
如何在活动场景动画过渡期间阻止状态栏和导航栏动画?
android android-5.0-lollipop activity-transition shared-element-transition
我在理解这两个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
我正在尝试使用前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
每当我搜索我遇到这个"android 5(L)活动过渡只有可用API >= 21
.
这很好,但我可以看到一些类似的应用程序QuickPic
和google inbox
使用类似的过渡和还致力于降低API,因此这个应用程序是如何做这样的事情?
我做了什么?
1)很多搜索:)
2)玩ActivityOptionsCompat
那个只适用于api> = 21,像这样:
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, DATA.EXTRA_PASSED_JSON);
Intent intent = new Intent(activity, PhotoViewerActivity.class);
intent.putExtra(DATA.EXTRA_PASSED_JSON, json);
ActivityCompat.startActivity(activity, intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
编辑(问题标记为重复):在这种情况下,它与其他问题不同,因为我说有其他应用程序在较低的api中进行此转换,我想知道他们是如何做到的.
我正在开发的应用程序显示图像网格.点击图像时,它会进入详细信息视图.详细信息视图包含一个ViewPager,允许您在网格中的每个图像之间滑动.这是通过传递路径列表(包含网格中的每个图像)以及被点击的图像的偏移来完成的,因此可以将ViewPager设置为最初显示该页面.
在ViewPager中当前偏移页面的Fragment内部进行共享元素转换的最佳方法是什么?网格(RecyclerView)图像应扩展为当前页面中的全屏图像.我看到了推迟和恢复活动转换的能力,因此应用程序将等待显示共享元素转换,直到从磁盘加载图像.但我希望能够使其在视图寻呼机中对正确的页面进行动画处理,并在用户返回时退出到当前页面的任何内容(因为您可以在页面之间滑动).如果您现在滑动到其他页面,则初始页面会回显到网格中.
目前,我使用"image_ [index]"格式的transitionName为视图寻呼机的片段中的每个图像分配.当我启动详细信息活动时,我使用相同的transitionName,索引是偏移量.
与此相关,我也想知道如何使用长按压使涟漪起作用.当您更改视图的激活状态时,它似乎取消了波纹.我想要一种类似于Gmail的效果,其中纹波重新开始并在长按完成后快速完成并触发激活状态.
animation android activity-transition shared-element-transition sharedelementcallback
我能够使TextViews在两个活动之间完美地过渡ActivityOptions.makeSceneTransitionAnimation
.但是我希望在文本转换时使文本向上扩展.我可以看到材料设计示例在联系卡过渡中放大文本"Alphonso Engelking".
我已尝试在目标TextView上设置scale属性并使用changeTransform共享元素转换,但它不会缩放,并且文本最终会在转换时被截断.
如何使用共享元素转换来缩放TextView?
android android-5.0-lollipop activity-transition shared-element-transition
我在Lollipop的共享元素转换中看到奇怪的事情.共享元素在开始制作动画之前就会闪烁(请参阅视频https://www.youtube.com/watch?v=DCoyyC_S-9A)
我不知道为什么会这样.然而,当我添加<item name="android:windowSharedElementsUseOverlay">false</item>
到我的主题时,我看不到闪烁,但过渡看起来并不好(看起来只有一半是动画"隐藏"动画的后半部分).
其他过渡设置:
<item name="android:windowActivityTransitions">true</item>
<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>
Run Code Online (Sandbox Code Playgroud)
我正在使用ActivityCompat和ActivityOptionsCompat开始活动:
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(ActivityMain.this,
new Pair<View, String>(playButton, getString(R.string.translation_control_button)),
new Pair<View, String>(findViewById(R.id.playerImage), getString(R.string.translation_artwork)));
ActivityCompat.startActivity(this, pendingIntent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
第一项活动:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/main_container">
<include layout="@layout/toolbar"/>
<FrameLayout
android:id="@+id/activity_main_fragment_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"></FrameLayout>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="45dp"
android:padding="7dp"
android:stretchColumns="*"
android:id="@+id/player_toolboxTable"
android:background="?colorPrimary">
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/player_toolbox">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:id="@+id/player_fav"
android:src="@drawable/rating_not_important"
android:onClick="playerFav"
android:background="@drawable/button_selector_semi_white"
/>
<ImageView
android:src="@drawable/av_pause_over_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:id="@+id/player_play"
android:onClick="playerPlay"
android:background="@drawable/button_selector_semi_white"
android:transitionName="@string/translation_control_button"
/> …
Run Code Online (Sandbox Code Playgroud) android android-transitions android-5.0-lollipop activity-transition shared-element-transition
所以,我面临的问题是我在两个活动和两个共享视图之间做的动画看起来不太好.
问题是它的"小问题",当从Activity2回到Activity1时,TextViews在动画结束时共享闪烁,从Activity2中显示"更大的文本"几分之一秒,所以它"闪烁" ".
活动1(RecyclerView有三个项目):
活动2(详情):
我在制作动画时拍摄了屏幕.从Activity2返回到Activit2时,您可以看到文本最后闪烁.这段视频(36MB,对不起大小)显示:
https://drive.google.com/file/d/0B3wIZ9CS9Kj_a0MyVFlzX1YtY0E/view?usp=sharing
问题是:我做错了什么?为什么会这样闪烁?我看到其他动画的视频,它们都非常流畅和漂亮.
我已经测试了不同类型的转换(changeBounds,explode等),但总会有一些奇怪的事情发生.任何提示,想法将不胜感激=)
我的代码
MainActivity(Activity1):
package se.snapcode.lollipoptest;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Pair;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.widget.RecyclerView;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private RecyclerView mRecyclerView;
private MyAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
GestureDetectorCompat gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
// use this setting to improve …
Run Code Online (Sandbox Code Playgroud) android android-animation android-transitions activity-transition shared-element-transition
我正在使用来自ViewPager(在调用活动中)的Activity转换以及共享元素和内容转换.重新进入调用活动时,我遇到了这个崩溃:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.ResultReceiver.send(int, android.os.Bundle)' on a null object reference
at android.app.EnterTransitionCoordinator.sendSharedElementDestination(EnterTransitionCoordinator.java:199)
at android.app.EnterTransitionCoordinator.viewsReady(EnterTransitionCoordinator.java:123)
at android.app.EnterTransitionCoordinator$2.onPreDraw(EnterTransitionCoordinator.java:148)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:895)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2153)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1180)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6558)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590)
at android.view.Choreographer.doFrame(Choreographer.java:560)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
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:1399)
Run Code Online (Sandbox Code Playgroud)
此外,一旦返回,屏幕开始闪烁,白色屏幕闪烁.
这是我的过渡标志:
<item name="android:windowContentTransitions">true</item>
<item name="android:windowActivityTransitions">true</item>
<item name="android:windowAllowReturnTransitionOverlap">false</item>
Run Code Online (Sandbox Code Playgroud)
我尝试在Calling和Called活动中设置Enter/Exit转换,但没有运气.
android android-5.0-lollipop activity-transition shared-element-transition