标签: android-transitions

使用KitKat Transitions Framework时如何实现backstack

我在Android上使用新的KitKat Transitions API.我Scene使用两个布局创建了两个对象.我从里面动画Scene 1Scene 2里面Fragment.Scene当用户按下后退按钮时,我想自动返回到上一个.

使用时是否有某种内置的后备机制Transitions,或者我必须自己滚动?

它很容易调用TransitionManager.go(scene1),但我真的不想onBackPressed()在我的所有具有Scene动画的片段中实现一个监听器.

android android-animation android-4.4-kitkat android-transitions

5
推荐指数
1
解决办法
1054
查看次数

自定义viewpager页面转换

我知道有很多关于Timely UI的问题.我目前正在使用ViewPager,其中我有三个页面具有不同的背景(绿色,黄色,红色).我想在它们之间实现转换,如下图所示.我知道如何为ViewPager实现自定义转换,但我不知道这个特定转换的逻辑是什么.

有任何人对此有经验吗?

在此输入图像描述

android android-viewpager android-transitions

5
推荐指数
1
解决办法
591
查看次数

android lollipop - setentertransition()片段在退出时无法正常工作

在替换片段时,我正在使用适用于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

5
推荐指数
1
解决办法
4149
查看次数

Android过渡动画无效

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

5
推荐指数
2
解决办法
1万
查看次数

从TextView到EditText的共享元素转换错误

我试图在转换之后在一个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)

android android-transitions shared-element-transition

5
推荐指数
0
解决办法
575
查看次数

重新打开堆栈中的现有活动时的共享元素过渡

我从那里打开一个活动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

5
推荐指数
1
解决办法
321
查看次数

共享元素的输入过渡不起作用,但返回过渡可以正常工作(片段过渡)

我将从显示事件情况的gif图像开始。

发生的事情的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

5
推荐指数
0
解决办法
714
查看次数

Android数据绑定和场景过渡

在新场景中,第一个场景中没有按钮。

当我切换到新场景时,数据绑定不起作用-我无法将新按钮上的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)

data-binding android android-transitions

5
推荐指数
1
解决办法
282
查看次数

如何在活动过渡中包括独立视图?

我绘制了一个未附加到任何父级的视图。

这是RecyclerView的装饰。视图停留在底部,当其对应部分出现在列表中时消失。

所有这些工作正常,但:

当我离开活动时,视图不会随活动过渡中的其他视图一起消失。

它会一直保留到动画结束,然后立即消失。

(请参见演示中的大绿色视图)

如何在活动的退出转换中包含此独立视图?


我创建了一个最小的Android Studio项目来复制该问题:https : //github.com/Ostkontentitan/transition-issue-demo

为了更好地查看此问题,可能将手机动画比例设置为> = 5


这是一个演示:

android android-view android-activity android-transitions

5
推荐指数
1
解决办法
123
查看次数

重新启动程序必须仅在所有者的初始化阶段过渡期间创建

我正在尝试第一次在我的应用中实现转换,但此消息不断崩溃

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)

发生的情况是该片段已成功启动并已过渡,但是存在两个问题。

  1. 当单击后退按钮时,根本不会发生过渡,并且片段只是消失而没有动画。
  2. 当我单击再次启动片段的按钮时,应用程序崩溃并显示该消息。

当我不使用交易时,一切工作正常。当单击后退按钮时,我只是弹出后退堆栈,因此可以在打开和关闭片段之间永久地来回移动。但是,一旦添加此交易,它就会中断。

我看过这篇文章,人们建议切换到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

5
推荐指数
0
解决办法
252
查看次数