我在Android上使用新的KitKat Transitions API.我Scene使用两个布局创建了两个对象.我从里面动画Scene 1到Scene 2里面Fragment.Scene当用户按下后退按钮时,我想自动返回到上一个.
使用时是否有某种内置的后备机制Transitions,或者我必须自己滚动?
它很容易调用TransitionManager.go(scene1),但我真的不想onBackPressed()在我的所有具有Scene动画的片段中实现一个监听器.
android android-animation android-4.4-kitkat android-transitions
我知道有很多关于Timely UI的问题.我目前正在使用ViewPager,其中我有三个页面具有不同的背景(绿色,黄色,红色).我想在它们之间实现转换,如下图所示.我知道如何为ViewPager实现自定义转换,但我不知道这个特定转换的逻辑是什么.
有任何人对此有经验吗?

在替换片段时,我正在使用适用于Android棒棒糖版本的幻灯片动画.它按预期的方式工作,但是在按下后退按钮时,它首先弹回当前片段,然后执行反向输入动画(滑出).
private void replaceContentFrameByFragment(Fragment replaceBy, String replaceByFragmentTag) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Slide slide = new Slide(Gravity.BOTTOM);
slide.setDuration(1000);
replaceBy.setEnterTransition(slide);
}
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.content_frame, replaceBy, replaceByFragmentTag);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commitAllowingStateLoss();
}
Run Code Online (Sandbox Code Playgroud)
那么,如何在幻灯片的反向动画完成后强制片段弹回?我注意到该活动提供了方法finishAfterTransition().frgament有类似的东西吗?
android android-animation android-fragments android-transitions android-5.0-lollipop
Android的过渡与爆炸和幻灯片是一样的.实际上我不认为它的动画效果.持续时间不是6秒.我该如何解决?
代码来自这里.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
Transition ts = new Slide(); //Slide(); //Explode();
ts.setDuration(6000);
getWindow().setEnterTransition( ts );
getWindow().setExitTransition( ts );
setContentView(R.layout.activity_main_activity);
}
@Override
public void onBackPressed() {
super.onBackPressed();
finishAfterTransition();
}
Run Code Online (Sandbox Code Playgroud)
风格v21.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="BaseAppTheme" parent="android:Theme.Material.Light">
<item name="android:colorControlHighlight">#0000AA</item>
<item name="android:navigationBarColor">#0000AA</item>
<item name="android:colorPrimaryDark">#0000AA</item>
<item name="android:colorPrimary">#0000FF</item>
<item name="android:colorAccent">#00FF00</item>
<item name="android:windowBackground">@android:color/black</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<!-- specify enter and exit transitions -->
<item name="android:windowEnterTransition">@transition/explode</item>
<item name="android:windowExitTransition">@transition/explode</item>
</style> …Run Code Online (Sandbox Code Playgroud) android android-animation android-transitions android-5.0-lollipop
我试图在转换之后在一个TextView和一个EditText´ but when showing the resulting Activity the text in theEditView have been shifted up. See attached pictures. Also, clicking on theEditView` 之间进行Android共享转换,将文本恢复到正确的位置.
首先单击RecylcerView中的任何行:
单元视图,日期TextEdit和名称TextEdit将共享给下一个活动.单元格背景将转换为工具栏.
启动活动单元格布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/adapter_actionlist"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackground"
android:transitionName="@string/transition_key_action" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="72dp"
>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/adapter_actionList_checkBox"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="72dp"
android:layout_marginRight="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="2"
android:ellipsize="end"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Large Text"
android:id="@+id/adapter_actionlist_toplabel"
android:paddingTop="0dp"
android:paddingBottom="0dp" …Run Code Online (Sandbox Code Playgroud) 我从那里打开一个活动A,然后打开活动B,并将共享元素传递给它。它可以动画化过渡效果,但是当我返回到活动A,然后再次进入活动B时(仍使用
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
Run Code Online (Sandbox Code Playgroud)
共享元素转换未运行。
对于常规动画,您可以在onNewIntent中调用overridePendingTransition()来运行动画。/sf/answers/582896401/
我尝试在那里调用startPostponedEnterTransition(),但是什么也没发生。
这是我的代码,允许过渡
void allowWindowTransitions(){
Window w = getWindow();
w.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
Run Code Online (Sandbox Code Playgroud)
启动活动的代码
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation(this, sharedElement, "profile");
startActivity(intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
我试过弄乱setSharedElementReturnTransition和setSharedElementReenterTransition,但是什么也没发生。
有没有一种方法可以手动触发共享元素转换来解决此问题。
android android-activity android-transitions shared-element-transition
我将从显示事件情况的gif图像开始。
该列表项应该设置为动画头文件。如您所见,当按下“后退”按钮时,标题项目会向下动画,成为列表项目。还有一个问题,这些片段的“活动”父对象也会在渐变过渡之后闪烁,因此,如果您对此有任何想法,我想知道:)
现在,在粘贴代码片段之前对我的代码进行一些解释。这个应用程式可浏览HTML文件的树状结构。小RecyclerView列表项是文档的标题。单击文档时,它会将标题固定在顶部,WebView并显示HTML。只有一个片段,并且在创建新片段时,该片段会创建其自身的另一个实例。该结构有些奇怪,但是后退按钮和堆栈似乎可以正常工作。这段代码在C#中,因为我使用的是Xamarin.Android,但除单击处理外,大多数代码都非常相似。
我可以从我的XML文件开始。布局仍然是WIP,所以我知道它们很凌乱。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/linear_layout_main"
android:background="#ffffff">
<LinearLayout
android:id="@+id/progressLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone"
android:gravity="center">
<ProgressBar
android:id="@+id/progressbar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:id="@+id/subroutines_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:background="#ffffff">
<TextView
android:id="@+id/routine_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="5dp"
android:textSize="24sp"
android:visibility="gone"/>
<FrameLayout
android:id="@+id/preview_frame"
android:layout_width ="match_parent"
android:layout_height="150dp"
android:visibility="gone">
<WebView
android:id="@+id/routine_preview"
android:layout_width="match_parent"
android:layout_height="150dp"
android:gravity="center_vertical"
android:padding="5dp"
android:transitionName="webview_preview_transition"
android:scrollbars="none"
android:visibility="gone"/>
<TextView
android:id="@+id/routine_preview_clickable"
android:layout_width="match_parent"
android:layout_height="150dp"
android:gravity="center_vertical"
android:visibility="gone"/>
</FrameLayout>
<TextView
android:id="@+id/preview_separator"
android:layout_width="match_parent"
android:layout_height="1dp"
android:gravity="center_vertical"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:background="@color/material_grey_100"
android:visibility="gone"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/routines_rv"
android:layout_width="match_parent"
android:layout_height="match_parent" …Run Code Online (Sandbox Code Playgroud) android android-animation xamarin.android android-transitions shared-element-transition
在新场景中,第一个场景中没有按钮。
当我切换到新场景时,数据绑定不起作用-我无法将新按钮上的onClick委派给ViewModel。
我当前的逻辑是:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TestViewModel testViewModel = new TestViewModel();
ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.test_fragment, container, false);
binding.setVariable(BR.vm, viewModel);
binding.executePendingBindings();
return mainView.getRoot();
}
public void changeToSceneB() {
ViewGroup sceneRoot = (ViewGroup) getView().findViewById(R.id.scene_root);
Scene loadedScene = Scene.getSceneForLayout(sceneRoot, R.layout.test_scene_b, getContext());
Transition transition = TransitionInflater.from(context).inflateTransition(R.transition.test_transition);
TransitionManager.go(loadedScene, transition);
}
}
Run Code Online (Sandbox Code Playgroud)
这是test_fragment XML的一部分:
<FrameLayout
android:id="@+id/scene_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/appBar"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="@dimen/activity_margin"
android:layout_marginRight="@dimen/activity_margin"
android:layout_marginTop="70dp">
<include
layout="@layout/test_scene_a"
binding:vm="@{vm}"/>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
这就是test_scene_b的样子(代码已更改,我留下了最有趣的部分):
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
<data>
<variable
name="vm"
type="com.test.test.TestViewModel"/>
</data> …Run Code Online (Sandbox Code Playgroud) 我绘制了一个未附加到任何父级的视图。
这是RecyclerView的装饰。视图停留在底部,当其对应部分出现在列表中时消失。
所有这些工作正常,但:
当我离开活动时,视图不会随活动过渡中的其他视图一起消失。
它会一直保留到动画结束,然后立即消失。
(请参见演示中的大绿色视图)
如何在活动的退出转换中包含此独立视图?
我创建了一个最小的Android Studio项目来复制该问题:https : //github.com/Ostkontentitan/transition-issue-demo
(为了更好地查看此问题,可能将手机动画比例设置为> = 5)
这是一个演示:

我正在尝试第一次在我的应用中实现转换,但此消息不断崩溃
Restarter must be created only during owner's initialization stage transition
这就是我添加片段的方式:
activity.subFm.beginTransaction()
.setCustomAnimations(
R.anim.slide_in_up,
R.anim.slide_out_down,
R.anim.slide_in_up,
R.anim.slide_out_down
)
.replace(R.id.feed_subcontents_frame_container, activity.searchFragment, "searchFragment")
.addToBackStack("searchFragment").commit()
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样:
activity.subFm.beginTransaction()
.setCustomAnimations(
R.anim.slide_in_up,
R.anim.slide_out_down,
R.anim.slide_in_up,
R.anim.slide_out_down
)
.add(R.id.feed_subcontents_frame_container, activity.searchFragment, "searchFragment")
.addToBackStack("searchFragment").commit()
Run Code Online (Sandbox Code Playgroud)
发生的情况是该片段已成功启动并已过渡,但是存在两个问题。
当我不使用交易时,一切工作正常。当单击后退按钮时,我只是弹出后退堆栈,因此可以在打开和关闭片段之间永久地来回移动。但是,一旦添加此交易,它就会中断。
我看过这篇文章,人们建议切换到appcompat:1.1.0-beta01或1.0.2,但实际上我已经使用过这两种方法。我尝试删除枯萎并运行该应用程序,但仍然崩溃。我究竟做错了什么?我只是想实现一个简单的slide_in和slide_out动画。
滑入:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromYDelta="100%p"
android:toYDelta="0%p"/>
</set>
Run Code Online (Sandbox Code Playgroud)
滑出:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:toYDelta="-100%" />
</set>
Run Code Online (Sandbox Code Playgroud) animation android android-fragments android-transitions material-components-android