- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近我开始使用 Transition API,有一件事我无法理解。
假设我有两个场景(附截图):
现在,当我点击 TRANSIT 按钮时,我会从第一个场景转移到第二个场景,或者从第二个场景转移到第一个场景,具体取决于最后显示的场景。当我从第一个场景转移到第二个场景时,一切都按预期进行:蓝色大方 block 移动到屏幕中心(通过 changeBounds
转换),绿色方 block 从屏幕的中心滑入屏幕顶部边缘(通过 slide
)过渡。
但是,当我进行向后过渡时,会发生一些奇怪的事情:在过渡开始时,蓝色方 block 被绘制在下方绿色方 block (根据它们的高度)并且它开始移动到如预期的右上角。而我想要做的是将蓝色方 block 保持在绿色方 block 之上,并将其移动到右上角而不改变其高度。
有什么我想念的吗?
相关部分代码:
转换.xml
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="together">
<changeBounds>
<targets>
<target android:targetId="@id/square_view"/>
</targets>
</changeBounds>
<slide android:slideEdge="top">
<targets>
<target android:targetId="@+id/green_square_view"/>
</targets>
</slide>
</transitionSet>
场景:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/green_square_view"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginStart="72dp"
android:layout_marginTop="216dp"
android:background="#0cfc28"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@id/square_view"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_marginBottom="180dp"
android:background="@color/colorPrimary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>
和
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@id/square_view"
android:layout_width="150dp"
android:layout_height="150dp"
android:background="@color/colorPrimary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.931"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.044" />
</android.support.constraint.ConstraintLayout>
主要 Activity :
package aga.android.sample.transitionssample
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.transition.*
import android.util.Log
import android.view.ViewGroup
import android.widget.Button
class MainActivity : AppCompatActivity() {
private lateinit var sceneRoot: ViewGroup
private var currentSceneIndex = 0
private var scenes: Array<Scene> = emptyArray()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
sceneRoot = findViewById(R.id.scene_root_view)
scenes = arrayOf(
Scene.getSceneForLayout(sceneRoot, R.layout.scene1, this),
Scene.getSceneForLayout(sceneRoot, R.layout.scene2, this)
)
val transition = TransitionInflater.from(this).inflateTransition(R.transition.move_animation)
findViewById<Button>(R.id.button).setOnClickListener {
currentSceneIndex = (currentSceneIndex + 1) % 2
TransitionManager.go(scenes[currentSceneIndex], transition)
}
}
}
最佳答案
您发布的第二个 scene.xml 中不存在 green_square_view
。如果您也将 green_square_view
添加到此场景,绿色方 block 将在两个方向上都位于蓝色方 block 之后。然而在这种情况下,Slide
动画不再播放,因为绿色方 block 并没有消失。对于新添加的 green_square_view
,这可以通过 android:visibility="invisible"
轻松解决,因为幻灯片动画对不再可用的 View 以及 View 使用react改变可见性。
我试图调试导致此行为的原因。最后我找到了这个 part in the documentation可能适用:
... For example, if a View was simply removed from its parent, then the View will be added into a ViewGroupOverlay and passed as the view parameter in onDisappear(ViewGroup, View, TransitionValues, TransitionValues). If a visible View is changed to be GONE or INVISIBLE, then it can be used as the view and the visibility will be changed to VISIBLE for the duration of the animation.
提到的 ViewGroupOverlay
绘制在这个 View 组中的内容之上。所以这可以解释这种行为。但是我不是 100% 确定这是导致问题的原因。尽管如此,在两个场景中都有 View 修复了有问题的行为。
关于android - Android Transition API 中的场景提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48097135/
尝试添加动画以替换 fragment 时抛出该异常。根据这个答案,stackoverflow ,过渡框架不能应用于 fragment ,但这篇文章表明你可以 How to use Material T
还有其他一些类似的问题,但都涉及 Android 支持库。我正在使用新的 androidx 库。 将 androidx 生命周期依赖项从 2.2.0-alpha03 更新到 2.2.0-alpha04
这个问题在这里已经有了答案: What is an optional value in Swift? (15 个答案) When two optionals are assigned to an i
Tailwind 提供了多个实用程序来控制哪些 CSS 属性转换,在这些属性中有 transition 和 transition-all。 我去检查了两个类的 CSS 属性,这里它们的顺序相同。 tr
Tailwind 提供了多个实用程序来控制哪些 CSS 属性转换,在这些属性中有 transition 和 transition-all。 我去检查了两个类的 CSS 属性,这里它们的顺序相同。 tr
这是一个由两部分组成的问题: 哪种应用样式优先:CSS 中的 -webkit-transition 规则或 jQuery 中类似的 $.css() 方法? 如果我还在 jQuery 中使用 .css
我想知道为什么在 FireFox 中使用 transition: all 0.5s ease-out; 时我会看到元素上的闪烁效果(截至本文撰写时的最新版本)。很难解释,但请在此处查看实际示例:htt
我对 css3 过渡属性的渲染速度有疑问。 假设我有一些元素: div, span, a {transition: all} div {margin: 2px} span {opacity: .5}
我对 css3 过渡属性的渲染速度有疑问。 假设我有一些元素: div, span, a {transition: all} div {margin: 2px} span {opacity: .5}
我目前正在用 Html 制作我的第一个网站,javascript 作为前端将首先出现。 我正在尝试创建一个折叠侧边栏,当我单击顶部导航右侧的按钮时会出现该侧边栏,但我对过渡效果有疑问,因为它会将所有内
我有一个 Activity ,一次托管一个 fragment ,并在两个 fragment 之间交换。 fragment A 使用按钮启动 fragment B, fragment B 使用按钮或后退
我正在尝试创建一种效果: 光标悬停在一个框上 横杆滑出 随着滑动 Action 缓和,标题出现 光标离开方框 随着栏向后滑动,标题开始消失 横杆完成向后滑动 但是,当光标离开框时,会再次调用延迟,因此
让我提供一些背景信息:我正在构建一个选项卡式应用程序,允许用户查找和查看我们服务器上托管的一些视频。每个选项卡都以不同的方式对视频进行分组,导航栏中有一个分段控件,用户可以使用该控件更精确地对列表进行
原始问题...更新了以下工作代码: 我有一个在 ajax 加载事件期间出现的加载图像。图像通过向 body 元素添加或删除“加载”类来显示/隐藏。目前,加载图像将背景大小设置为从 0% 到 100%
我对 css3 过渡属性的渲染速度有疑问。 假设我有一些元素: div, span, a {transition: all} div {margin: 2px} span {opacity: .5}
当我继续学习前端开发和练习 Sass 优化我的 CSS 代码时,我又遇到了另一种情况。 在互联网上进行研究和教程后,我在 Sass 中设置了名为“transition”的全局混合。代码如下所示: @m
关于 Chrome 和 css 转换的问题太多了,我不确定以前是否有人问过这个问题。 我的情况是这样的:我的布局基本上是左右分页。右侧的一框内容需要显示在左侧的内容之上(这个我没有发言权,桌面和移动之
我在两个 Activity 之间的共享元素中使用了自定义 Transition。 我的转换不起作用,因为 TransitionValues 参数在 captureStartValues 和 这两种方法
我在 google Chrome 和 Safari 上运行我的应用程序,两者都兼容 webkit。我正在使用 -webkit-transition 构建一个滚动的 div。 当我将文档类型指定为 HT
以下代码在 chrome 中产生了预期的结果,即;直接向所有元素添加过渡延迟。 $('.front-nav .sub-menu').each(function() { var transiti
我是一名优秀的程序员,十分优秀!