标签: android-transitions

TransitionListener 是如何工作的?

我试图理解 Lollipop 转换和 TransitionListener,所以我创建了 2 个简单的活动。活动 A 和活动 B。活动 A 启动活动 B。

\n\n

活动 A 在页面底部有一个小绿色框。\n活动 B 在页面顶部有一个大绿色框

\n\n

移动过渡如预期顺利且良好。

\n\n

在 Activity BI 中,我为 SharedElementEnterTransition 和 SharedElementReturnTransition 添加 TransitionListener。

\n\n

我的期望是,当进入活动 B 时,“进入侦听器”的 onTransitionStart 和 onTransitionEnd 将执行,而当从活动 B 返回时,“返回侦听器”的 onTransitionStart 和 onTransitionEnd 将执行。但事实并非如此,两个监听器都是在进入和返回时执行的。

\n\n

任何有关其为何如此工作的帮助都将受到赞赏。

\n\n

我添加了一些系统打印,这是进入活动 B 时打印的内容:

\n\n
12:59:22.686 #\xc2\xa4 ActivityB.onTransitionStart - Enter\n12:59:22.686 #\xc2\xa4 ActivityB.onTransitionStart - Return\n12:59:23.000 #\xc2\xa4 ActivityB.onTransitionEnd - Enter\n12:59:23.000 #\xc2\xa4 ActivityB.onTransitionEnd - Return\n
Run Code Online (Sandbox Code Playgroud)\n\n

从活动 B 返回时打印:

\n\n
13:01:27.584 #\xc2\xa4 ActivityB.onTransitionStart - Enter\n13:01:27.584 #\xc2\xa4 ActivityB.onTransitionStart …
Run Code Online (Sandbox Code Playgroud)

android android-transitions android-5.0-lollipop

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

Lollipop 活动通过淡入淡出共享元素过渡

我正在尝试执行一个简单的共享元素转换,其中单击的列表项的一行转换为结果活动的顶部标题视图。我希望顶部标题视图占据列表项的位置,淡入淡出,然后转换到其最终位置。

这是sharedElementEnterTransition我为被调用的活动编写的简单代码:

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <fade android:fadingMode="fade_out" />
    <changeBounds />
    <changeTransform />
    <changeImageTransform />
</transitionSet>
Run Code Online (Sandbox Code Playgroud)

但是,fade过渡没有做任何事情。我看到结果视图突然在现场弹出然后转换到最终位置。

这是我开始活动的地方

view.setOnClickListener(view -> {
    final Intent intent = new Intent(...);
    view.setTransitionName("test");
    final ActivityOptions options = 
        ActivityOptions.makeSceneTransitionAnimation(activity, view, "test");
    startActivity(intent, options.toBundle());
});
Run Code Online (Sandbox Code Playgroud)

无法完全弄清楚发生了什么。任何人有任何想法?布局代码正是您所期望的android:transitionName="test"

android android-transitions

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

一起使用共享元素过渡和自定义动画

我想使用共享元素过渡,但与此同时,我还想要一个通用的淡入淡出动画。

目前我有这个代码:

Transition transition = TransitionInflater.from(getContext()).inflateTransition(R.transition.my_transition);

myFragment.setSharedElementEnterTransition(transition);

getFragmentManager().beginTransaction()
        .setCustomAnimations(R.anim.fade_out, R.anim.fade_in)
        .replace(R.id.content, myFragment).addToBackStack(null)
        .addSharedElement(sharedElement, "price")
        .commit();
Run Code Online (Sandbox Code Playgroud)

问题是我的自定义动画没有运行。如果我删除共享元素过渡,则自定义动画将起作用。有没有办法同时使用它们?提前致谢!

android android-animation android-fragments android-transitions

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

Fragment Shared Element Transitions FragmentManager with add() 不起作用

当我尝试使用Medium GitHub 上这篇文章中的类似代码对片段使用转换时。当我在片段管理器上使用 add method() 时它不起作用,但它可以与 replace() 一起使用。

FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .addSharedElement(mSharedElement, "transName")
            .add(D.id.content_frame, fragment, FRAG_NAME)
            .addToBackStack(null)
            .commit();
Run Code Online (Sandbox Code Playgroud)

我需要使用 add() 方法来保留下面的片段,因为用户将在包含项目列表的第一个片段和显示有关该项目的详细信息的第二个片段之间来回导航。我不想继续用列表加载片段。

在片段管理器上使用 add() 时,有没有办法让共享元素转换工作,而不是 replace()。

android android-fragments fragmentmanager android-transitions shared-element-transition

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

Android共享元素在ImageView比例上的转换是错误的

我尝试了许多不同的变体,但无法使返回过渡正常工作。

当我退出活动 B 时,图像会转换回活动 A,但它会缩放直到消失,然后在消失后显示应有的位置。

我尝试了以下内容和该组中其他内容的不同变体

Activity A 来自 recyclerview 中的点击侦听器。

Intent intent = new Intent(getActivity(), ApplyActivity.class);
            ActivityOptionsCompat transitionActivityOptions;
            transitionActivityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), imageView, getString(R.string.transition_image_details));
            intent.putExtra(ApplyActivity.EXTRA_NAME, selected_launcher);
            intent.putExtra(ApplyActivity.EXTRA_INSTALLED, mLaunchers.get(position).getInstalled());

            getActivity().startActivity(intent, transitionActivityOptions.toBundle());
Run Code Online (Sandbox Code Playgroud)

活动A布局

<ImageView
android:id="@+id/launcher_icon"
android:transitionName="@string/transition_image_details"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_centerHorizontal="true"
android:padding="@dimen/small_padding"
android:layout_alignParentTop="true" />
Run Code Online (Sandbox Code Playgroud)

活动B

 Transition transition = TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform);

        getWindow().setSharedElementReturnTransition(transition);
        getWindow().setSharedElementEnterTransition(transition);
        getWindow().setSharedElementExitTransition(transition);
Run Code Online (Sandbox Code Playgroud)

我尝试过以下 true/false getWindow().setSharedElementsUseOverlay(true);

Activity B 布局(在 AppBarLayout/CollapsingToolbarLayout 内)

<ImageView
   android:id="@+id/backdrop"
   android:transitionName="@string/transition_image_details"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="80dp"
   android:paddingTop="30dp"
   app:layout_collapseMode="parallax"
   app:layout_collapseParallaxMultiplier="0.7" />
Run Code Online (Sandbox Code Playgroud)

更改图像变换.xml

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeTransform  />
<changeImageTransform />
</transitionSet>
Run Code Online (Sandbox Code Playgroud)

我也尝试在 value-v21/styles.xml 中设置转换,但没有成功。 …

android android-transitions material-design

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

共享元素过渡 + Fragment + RecyclerView + ViewPager

我正在实现一个图库应用程序,它有一个 Fragment,其中包含一个带有图像的 RecyclerView,单击图像我转到 ViewPager 以循环浏览图像。
现在,我正在尝试实现视频中的入口动画。问题是动画不起作用,我显然遗漏了一些东西(仅显示与转换相关的代码):

视图页面:

public class ViewPagerFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_viewpager, container, false);
        Transition transition = TransitionInflater.from(getContext()).inflateTransition(R.transition.fragment_transition);

        setSharedElementEnterTransition(transition);
        postponeEnterTransition();
        return view;
}
Run Code Online (Sandbox Code Playgroud)

网格适配器:

public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder> {

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.setPhotoImage(new File(mArrayOfPhotos.get(position).photo));
        ViewCompat.setTransitionName(holder.photoImage, mPhotoObjects.get(position).photo);
    }

    @Override
    public void onClick(View view) {
        // pass an image view that is being clicked... 
        // ...via listener to …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-transitions android-glide

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

如何使用ffmpeg在android视频上添加gl过渡?

视频上的 GLSL 过渡并使用 ffmpeg 进行渲染,但我找不到如何在 ffmpeg 命令中添加 GLES 过渡的正确解决方案。

点击这里ffmpeg-gl-transition

我已经尝试了上述解决方案,但它给出了错误并且不起作用。不是理解清楚。请任何有想法的人帮助我。

video android ffmpeg glsles android-transitions

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

TransitionManager.beginDelayedTransition 在活动首次加载时没有动画

我使用 TransitionManager 使用带有动画的constraintLayout。

我有以下两种布局

这是我的 main_activity.xml

<android.support.constraint.ConstraintLayout
        android:id="@+id/constraintLayout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

       <ImageView
            android:id="@+id/image"
            android:layout_width="0dp"
            android:layout_height="160dp"
            android:background="@color/colorPrimary"
            app:layout_constraintTop_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"/>

    <Button
            android:id="@+id/btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="parent"
            android:text="Let's start animating"/>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

这是我的 main_activity_alt.xml

<android.support.constraint.ConstraintLayout
        android:id="@+id/constraintLayout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:app="http://schemas.android.com/apk/res-auto">

      <ImageView
            android:id="@+id/image"
            android:layout_width="0dp"
            android:layout_height="160dp"
            android:background="@color/colorPrimary"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"/>

    <Button
            android:id="@+id/btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="parent"
            android:text="Let's start animating"/>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

在我的 MainActivity 我想动画图像向上滑动这将是 main_activity_alt.xml

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val constraintSet1 = ConstraintSet()
        constraintSet1.clone(constraintLayout)

        val constraintSet2 = ConstraintSet()
        constraintSet2.clone(this, R.layout.activity_main_alt)

        val transition = ChangeBounds() …
Run Code Online (Sandbox Code Playgroud)

android android-animation android-transitions android-constraintlayout

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

三个或更多活动之间的共享元素转换中断

问题

我想实现 Activity A 和 B 之间以及 Activity B 和 C 之间的共享元素转换。

我根据android 转换文档做了所有事情。

之间没有问题:

  • A => B => 回到 A

  • A => B 和 B => C => 回到 B

但如果我这样做:

  • A => B 和 B => C => 回到 B => 回到 A

最后一步不会有任何共享元素过渡(实际上不仅是共享元素过渡,即使只有淡入淡出也可能会丢失)。

我一直在到处寻找解决方案,但似乎每个人都只需要 A => B(和 B => A)共享元素转换,而不再关心从 B => C 返回到 A 的任何转换。

例子

看一个我基于android的动画示例创建的例子,其中Activity A = MainActivity,B = DetailActivity,C = DetailDetailActivity。单击活动 B 上的按钮将导航到活动 C。

在此处输入图片说明

android android-transitions shared-element-transition

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

如何获取fragment之间的转换完成回调

所以这个问题是类似的:如何知道 Fragment 上的输入转换何时结束?


但我自己没有设置转换,这不是共享转换。所以我无法获取用于附加侦听器的转换对象。


背景:

我使用了 BottomSheetDialogFragment,它在幕后使用带有自己的过渡的样式

<item name="android:windowAnimationStyle">
  @style/Animation.MaterialComponents.BottomSheetDialog
</item>
<style name="Animation.MaterialComponents.BottomSheetDialog" parent="Animation.AppCompat.Dialog">
  <item name="android:windowEnterAnimation">@anim/mtrl_bottom_sheet_slide_in</item>
  <item name="android:windowExitAnimation">@anim/mtrl_bottom_sheet_slide_out</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我想要的是在转换完成后添加我的动画。由于在过渡的同时播放动画是没有用的

android android-transitions android-bottomsheetdialog

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