我使用来自棒棒糖的新共享元素在两个活动之间实现了图像转换.它正在工作但是在转换过程中我在整个屏幕上都出现了一个奇怪的白色闪烁,我找不到如何摆脱它.这是一个例子:
以下是第二个活动的启动方式
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)
谢谢你的帮助
我在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
请查看此视频,其中显示了共享元素活动转换.这是从列表活动到详细活动的过渡.
[视频链接不再有效]
如您所见,imageview被绘制在选项卡前面.
我期望的是在imageview上以字体绘制标签并在整个过渡过程中淡出(这样在动画结束时它们就消失了).
似乎唯一有用的是设置windowSharedElementsUseOverlay
为true,但这有其他丑陋的效果,所以这似乎不是一个选项.
最常建议的方法是在转换本身中包含选项卡,但问题是详细信息活动中没有选项卡,因此无法共享它们.
代码:我开始这样的详细活动:
options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, pairs);
ActivityCompat.startActivity(activity, subActivity, options.toBundle());
Run Code Online (Sandbox Code Playgroud) 我的应用程序主屏幕包含图像的网格视图.当用户选择图像时,使用共享元素转换开始细节活动,该共享元素转换将所选择的网格图像动画化为位于细节活动中的CardView中的配对图像.
升级我的详细视图XML布局以包含CoordinatorLayout以及CollapsingToolbarLayout后,共享元素转换将图像视图移动到详细活动中的错误位置("enter"活动).如果在包含目标图像视图的CardView上方没有CollapsingToolBarLayout,框架似乎会将整个AppBarLayout和内部CollapsingToobarLayout的偏移量和动画放大到图像的大致位置.
通过将activityView(带有transitionName)添加到activity_detail.xml中的3个CardView中的任何一个,可以在Chris Banes的cheesesquare示例应用程序中复制该问题:
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
android:transitionName="sharedImage" />
Run Code Online (Sandbox Code Playgroud)
然后在CheeseListFragment.java中的onBindViewHolder中设置共享元素转换,如下所示:
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mBoundString = mValues.get(position);
holder.mTextView.setText(mValues.get(position));
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(context, CheeseDetailActivity.class);
intent.putExtra(CheeseDetailActivity.EXTRA_NAME, holder.mBoundString);
holder.mImageView.setTransitionName("sharedImage");
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation(
getActivity(v.getContext()),
holder.mImageView,
"sharedImage");
ActivityCompat.StartActivity((MyActivity) context, intent, options.toBundle());
}
});
Glide.with(holder.mImageView.getContext())
.load(Cheeses.getRandomCheeseDrawable())
.fitCenter()
.into(holder.mImageView);
}
Run Code Online (Sandbox Code Playgroud)
如果运行应用程序,并单击奶酪列表项,您将了解过渡动画如何将图像移动到目标活动视图中的错误(太高)偏移.动画完成后,图像将"扭曲"到正确的位置.
任何关于可能的解决方法的想法都会非常受欢迎.
animation android shared-element-transition android-coordinatorlayout android-collapsingtoolbarlayout
在我的应用程序中,我将工具栏和状态栏设置为共享对象, 如本文第2项中的建议所示
工具栏和选项卡的一般行为和轮廓非常出色 - 唯一的问题是,当我转到活动B时,工具栏的某些UI元素不参与内容转换,尤其是工具栏标题和菜单图标.
我尝试添加一个SharedElementCallback并在其中循环工具栏和选项卡的子项并将它们全部添加到Fade转换 - 但它不会影响工具栏和选项卡内容的行为.
不知道怎么从这里开始?期望的效果是使工具栏的元素(标题,向上按钮,菜单图标)参与内容转换.
评论后添加了截图:
活动A.
活动B.
在Android 5.0 Lollipop上,
我有两个活动A和B.活动B有一个slie从底部进入过渡带有Overlay ActionBar,但是当B显示时,ActionBar也从下到上滑动.
如何阻止动作栏进行幻灯片切换.系统操作栏有一个我可以添加到排除目标的ID吗?
谢谢!
android android-actionbar android-5.0-lollipop activity-transition shared-element-transition
在我的Android应用程序中,我有一个MainActivity说M.这个活动使用Android的tabLayout小部件来初始化四个选项卡.每个标签对应一个片段,说F1,F2,F3,F4是四个片段.
从F2开始,我发起的活动就是C.但是在启动C时,我设备上的状态栏会闪烁一会儿.闪烁我的意思是,原来是它的黑色(黑色).然后它会逐渐淡化为白色并再次变暗.现在C启动了.当我尝试退出C,返回F2(通过按导航后退按钮)再次显示相同的效果,但这次它变得更糟.我的意思是状态栏保持白色有点长.然后它又回到了深色.
我只在android Nougat上观察这个问题.在以前的版本上它的wokring.
到目前为止,我已经尝试过 如何在活动场景动画过渡期间阻止状态栏和导航栏动画?
上面的链接有两种方法:Appraoch 1.它对我不起作用方法2.我的应用程序崩溃,因为findViewById(android.R.id.statusBarBackground);
返回null.
请建议我如何解决这个问题.
android activity-transition shared-element-transition android-statusbar android-7.0-nougat
问题
激活和停用(沉浸式)全屏模式会导致状态栏和导航栏“淡入”和淡出。动画似乎在不同设备上有所不同,我想完全禁用动画。我的最低目标 SDK 是 19;但是,我也会对需要更高 API 级别的解决方案感到满意。请参阅下文了解更多详情。
运行演示
我实现了一个(最小的)演示,以便人们可以轻松测试。一切都可以在 GitHub 上找到:
为了澄清起见,我使用setSystemUiVisibility(FLAGS)
激活/停用全屏模式。此外,我使用以下标志:
激活全屏模式:
int visibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
mainView.setSystemUiVisibility(visibility);
Run Code Online (Sandbox Code Playgroud)
停用全屏模式:
int visibility = View.SYSTEM_UI_FLAG_VISIBLE;
mainView.setSystemUiVisibility(visibility);
Run Code Online (Sandbox Code Playgroud)
我尝试过的
我已经尝试了很多不同的事情并做了很多研究。下面,我想总结一下我已经尝试过的主要方法。
setSystemUiVisibility
很多人建议使用getWindow().setFlags
更改标志,而不是使用(这似乎是推荐的)。然而,以不同的方式设置标志似乎没有效果。我还认为这已经过时了。有些人只是推荐不同的标志(通常只是为了隐藏栏) - 但动画保持不变。
View.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
overridePendingTransition(0, 0)
但在这种情况下这似乎并不那么有效。动画看起来是什么样子
只是为了澄清我的意思。下面是显示状态/导航栏动画的 gif 动画(抱歉,我没有嵌入图像的权限)
Android 8.0 / 华为 / 没有淡出动画(两个条都根据需要消失,但动画有淡出)。状态栏和导航栏都会“闪现”。
Android …
是否有可能合并ActivityOptionsCompat.makeCustomAnimation()
和ActivityOptionsCompat.makeSceneTransitionAnimation()
?我想实现以下Activity
变化效果:
我可以分别使用第1点和第 2点、第 3点,有没有办法同时使用它们,也许使用不同的方法或其他方法?
android android-animation android-activity activity-transition