Articles of android transitions

折叠CardViewanimation无法正常工作

我想做什么 我有一个RecyclerView ,其中包含许多基本上属于CardView 。 这些卡片在他们的身体中间有一个支持文本,默认情况下可见性设置为GONE ,当我点击卡片右侧的箭头时,它变得可见。 我试图在文本显示的同时对卡进行animation处理,然后它就会崩溃。 下图显示了扩展卡和折叠卡: CardView布局(为了便于阅读,我删除了一些部分): 问题 当卡片展开并显示正文TextView ,animation正在工作,但是,当我尝试将其折叠回来时,animation下方的卡片与第一张卡片重叠。 例: 到目前为止我尝试过的 我之前已经在这里问了一个关于这种行为的类似问题 ,但是该解决方案不适用于卡片中间的TextView 。 负责animation部分的代码位于RecyclerView适配器内。 箭头有一个点击监听器,可以调用以下方法: private fun toggleVisibility() { if (bodyContent.visibility == View.GONE || bodyContent.visibility == View.INVISIBLE) { btSeeMore.animate().rotation(180f).start() TransitionManager.beginDelayedTransition(root, AutoTransition()) bodyContent.visibility = View.VISIBLE } else { btSeeMore.animate().rotation(0f).start() TransitionManager.beginDelayedTransition(root, AutoTransition()) bodyContent.visibility = View.GONE } } root是我的CardView 。 我也尝试使用LinearLayout而不是卡本身进行延迟转换,但这也不起作用。 如何为我的布局实现这种行为?

FragmentTransaction.replace()淡入过渡显示“ghost”片段

您可以下载我的整个项目来尝试和调试。 这是我的整个代码的回购: https : //bitbucket.org/lexic92/studio48/ 当我尝试用空白片段替换空白片段时,我在转换中出现了“鬼片段”。 如何重新创建问题:我有一个导航抽屉,当我点击一个项目时,它会打开一个填满整个屏幕的片段。 导航抽屉: 按钮1 – 带文本的片段 按钮2 – 空的片段 当我打开应用程序时,它会从包含文本的片段开始。 然后,我打开导航抽屉并单击按钮2. 转换不良 ,瞬间变为空白屏幕,然后切换回淡入淡出的文本,直到它变为空白屏幕。 如果我打开导航抽屉并再次单击按钮2,它将从全文淡出到空白屏幕。 因此, 对于一个瞬间,它会在不应该的情况下显示带有文本的片段。 我一步一步地在调试模式下运行我的应用程序,以减慢速度,并validation这种行为是否真的发生了。 如果我第三次打开导航抽屉并再次单击按钮2,它正确地不会显示任何animation,因为它正在淡入同一个屏幕。 有谁知道为什么会这样? 你认为它与导航抽屉有什么关系吗? 这是我的整个代码的回购: https : //bitbucket.org/lexic92/studio48/ 以下是一些代码摘录: SongDetailActivity.java: @Override public void onNavigationDrawerItemSelected(int position) { // update the main content by replacing fragments FragmentManager fragmentManager = getSupportFragmentManager(); //OPEN THE BLANK SCREEN if(position == […]

活动转换无效

我正在尝试实现活动转换,但我无法看到效果。 这是我的第一个活动的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_architecture); setUpWindowAnimations(); } private void setUpWindowAnimations() { if (android.os.Build.VERSION.SDK_INT >= 21) { Log.i(“ANIM”, “Fade called”); Fade fade = new Fade(2); fade.setDuration(3000); getWindow().setExitTransition(fade); } } 以下是第二个活动的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image); setUpWindowAnimations(); } private void setUpWindowAnimations() { if (android.os.Build.VERSION.SDK_INT >= 21) { Log.i(“ANIM”, “slide […]

使用SharedElement活动转换与自定义视图

我正在开发一个概念validation,我在TableLayout中有一些自定义视图。 单击其中一个视图时,我想要为扩展为新活动的视图设置animation。 我想要达到的效果类似于这里看到的效果。 从我的研究来看,似乎这样做的方法是使用共享元素Transitions 。 但是,我无法让它正常工作,我想知道是否因为我使用自己的自定义视图。 具体来说,衰落正在发生,但缩放和翻译动作不是。 检查下面的GIF,看看我在哪里。 在示例中,我单击左上角的圆圈,我想将其转换为新活动中的整个圆圈。 按下后退按钮时也会出现此问题。 我认为这是不正确的,因为必须绘制视图,但有没有办法进一步自定义我的视图以使其工作? 我发现的这种转换的所有示例都包含ImageViews,Buttons和TextViews。 以下是相关来源。 我的自定义视图很大,不包含任何特殊代码,只是覆盖onDraw()和onMeasure()。 MainActivity.java package com.rscottcarson.circleschedulertest; import android.app.Activity; import android.app.ActivityOptions; import android.content.Intent; import android.support.v4.app.ActivityOptionsCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Toast; public class MainActivity extends Activity { private View view1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); view1 = findViewById(R.id.circle1); […]

具有转换的片段事务 – 需要唯一的transitionNames

我想从列表视图转到详细视图,因此,我在列表中使用了OnClickListener : @Override public void onClick(View view) { Bet bet = (Bet)view.getTag(); FragmentManager fm = getActivity().getSupportFragmentManager(); BetDetailFragment f = BetDetailFragment.create(bet); String tag = f.getClass().getName(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); f.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); } FragmentTransaction ft = fm.beginTransaction() .replace(R.id.frame_container, f, tag) .addToBackStack(tag); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Ld(this, “TRANS: ” + TransitionUtil.getTransitionNameBetLogo1(bet) + “|” + view.findViewById(R.id.ivLogo1)); Ld(this, […]

转换时EditText提示可见

在我的应用程序中,我正在使用Android Activity Slide过渡。 我遵循了一个很好的教程 ,一切都按预期工作,除了我的EditText的提示,它包含在InputTextLayout : 所有组件都很好地animation,但提示只是在animation开始之前popup并保持在最终位置。 我是否还需要添加一些额外的代码来告诉框架为提示设置animation? 根据Android开发人员文档,它应该工作(或者至少它不是不受支持的)。 我正在使用支持设计库的22.2版。 如果有人能指出我正确的方向,那就太好了。

如何知道一项活动是否在没有过渡的情况下开始?

我有一个用例,我主要通过转换启动一个活动,但从导航抽屉打开它时不是这种情况。 为了保持转换顺利,我有一个Transition.TransitionListener ,在转换完成后我会在其中触发一些UI更新。 所以我有这样的事情: public class SomeActivity extends Activity { public void onCreate(Bundle savedInstanceState){ // … if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition(); sharedElementEnterTransition.addListener(new Transition.TransitionListener() { // … @Override public void onTransitionEnd(Transition transition) { doSomeUiUpdating(); } }); } else { // Pre-Lollipop doSomeUiUpdating(); } } } 这在使用animation启动Activity时效果很好,但是如何知道Activity是否在没有转换的情况下启动,以便我可以调用doSomeUiUpdating() ? 我确信在Activity , Window , Transition或我忽略的某个地方必须有一个简单的方法。 […]

EnterTransitionCoordinator在Android 5.0中导致NPE

添加退出并输入活动转换到应用程序后,我收到崩溃报告,如下所示: 致命exception:java.lang.NullPointerException:尝试在android.view.ViewOverlay $ OverlayViewGroup.add(ViewOverlay.java)的空对象引用上调用虚拟方法’android.view.ViewParent android.view.View.getParent()’ 164)在Android.上的android.app.EnterTransitionCoordinition.startReservedAnimations(EnterTransitionCoordinator.java:598)上的android.view.View.Ev响应中的android.view.EtlayEnystions.startSharedElementTransition(EnterTransitionCoordinator.java:325)上的android.view.ViewGroupOverlay.add(ViewGroupOverlay.java:63)。 app.EnterTransitionCoordinator.access $ 200(EnterTransitionCoordinator.java:42)在Android.app的android.app.EnterTransitionCoordinition $ 5 $ 1.run(EnterTransitionCoordinator.java:389)android.app.ActivityTransitionCoordinition.startTransition(ActivityTransitionCoordinator.java:698)。在android.view.ViewRootImpl.performTraversa的android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)的EnterTransitionCoordinator $ 5.onPreDraw(EnterTransitionCoordinator.java:386) ls(ViewRootImpl.java:1985)位于android.view.ViewRoreIvers上的android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1077)$ traversalRunnable.run(ViewRootImpl.java:5845)android.view.Choreographer $ CallbackRecord.run (Choreographer.java:767)位于android.view.Choreographer的舞台上的android.view.Choreographer(dooreographer.java:580)的android.view.Choreographer(Choreographer.java:570)。 java:753)在android.os.Handler.handleCallback(Handler.java:739)的android.os.Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:135)at android.app.ActivityThread.main(ActivityThread.java:5272)位于com.android的java.lang.reflect.Method.invoke(Method.java)java.lang.reflect.Method.invoke(Method.java:372) .internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:909)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 它不可重复,但崩溃计数很重要。 做了一些研究,我发现这个提交表明它(实际上)是Android中的一个内部错误: https : //android.googlesource.com/platform/frameworks/base/+/83c692efd3c53050fce132dfd2ef21763d3cf010%5E%21/#F0 所有崩溃报告都是5.0,5.0.1或5.0.2。 因为5.1有更广泛的传播,但没有显示崩溃,似乎EnterTransitionCoordinator在5.1中得到修复。 因此,一种可能的解决方案是检查API级别22或更高级别,然后只进行转换。 不过我想知道是否有更好的方法; 一些解决方法可能,尽管这似乎是Android的内部问题(堆栈中的所有系统类)?

未执行活动转换(Lollipop)

我正在制作活动X和活动Y之间的过渡动​​画。 X包含带有图像的列表,单击图像时会展开并在活动Y中 “缩放”。 因此,此图像是X和Y之间的共享元素。 我在XML布局中设置了transitionName属性。 这是启动活动Y的代码: ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, clickedImage, clickedImage.getTransitionName()); startActivityForResult(intent, OPEN_PICTURE_REQUEST, options.toBundle()); 直到这里,一切正常。 但是,我还想在输入时为活动Y的布局设置animation。 为此,我在XML文件(picture_enter.xml)中定义了转换: 最后,在活动Y的创建中,我将过渡初始化: TransitionInflater inflater = TransitionInflater.from(this); Transition transition = inflater.inflateTransition(R.transition.picture_enter); Window window = getWindow(); window.setEnterTransition(transition); 但这从未执行过。 只有图像的“缩放”效果才能正常工作。 我也尝试过以编程方式定义转换。 有什么建议么?

退出转换前更新源活动

我需要有关活动之间转换的帮助: 我有两个活动A和B,并且都有一个具有相同图像列表的ViewPager。 每个页面都有一个ImageView,其transitionName等于image_x,其中x是页面索引。 A启动活动B调用ActivityOptionsCompat.makeSceneTransitionAnimation并且输入转换完全正常。 问题如下:当我关闭活动B时,退出转换不会在B的相同位置初始化活动A的视图寻呼机。 当用户关闭B时,后者在结果中设置当前页面位置。 在活动A的onActivityResult中,我调用setCurrentItem ,行为显示在gif中。 有没有办法在退出转换开始之前更新活动A?