我想为两个 ConstraintLayouts 制作动画 - 一个是另一个的 child 。
我知道动画只适用于 ConstraintLayout 的直接子级,所以这是我的布局:
<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:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.constraint.ConstraintLayout
android:id="@+id/cl"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#393939"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Move me!"
android:textColor="#fff"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.8" />
</android.support.constraint.ConstraintLayout>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Animate" />
</android.support.constraint.ConstraintLayout>
它有一个 ConstraintLayout 作为根布局和一个内部 ConstraintLayout,它有一个背景颜色和一个 TextView。内部布局在开始时设置为 gone。
我想淡入内部 ConstraintLayout(将其可见性设置为 View.VISIBLE)并向上移动 TextView(设置其vertical Bias 到一个较低的数字)。由于我无法为内部 subview 设置动画,因此我创建了 4 个约束集 - csA 用于内部 ConstraintLayout 的可见性动画,csB 用于向上移动 TextView 的动画。
class MainActivity : AppCompatActivity() {
val csA1 = ConstraintSet()
val csA2 = ConstraintSet()
val csB1 = ConstraintSet()
val csB2 = ConstraintSet()
lateinit var btn: Button
lateinit var cl: ConstraintLayout
lateinit var root: ConstraintLayout
var switch = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
root = findViewById(R.id.root_layout)
val tv: TextView = findViewById(R.id.textview)
cl = findViewById(R.id.cl)
btn = findViewById(R.id.button)
btn.setOnClickListener { toggle() }
csA1.clone(root)
csA2.clone(csA1)
csA2.setVisibility(R.id.cl, View.VISIBLE)
csB1.clone(cl)
csB2.clone(csB1)
csB2.setVerticalBias(R.id.textview, 0.3f)
}
fun toggle() {
TransitionManager.beginDelayedTransition(root)
val cs = if (!switch) csA2 else csA1
cs.applyTo(root)
val vsB = if (!switch) csB2 else csB1
TransitionManager.beginDelayedTransition(cl)
vsB.applyTo(cl)
switch = !switch
btn.text = "switch: $switch"
}
}
第一次按下按钮可能有效 - 但在第二次按下时,布局不会被隐藏,并且 View 保持在原处。文本被剪切到第一个字母,全文在下一次点击时显示。当触发器从 true 设置为 false 时,背景闪烁为白色并持续很短的时间,然后再次变为灰色。
该项目中没有其他内容。如果我禁用其中一个动画,另一个可以正常工作。
我尝试过的:
postDelayed 延迟 vsB 以及使用 startDelay 和 duration 设置自定义转换可见性动画。
Handler().postDelayed({
TransitionManager.beginDelayedTransition(cl)
vsB.applyTo(cl)
}, 450)
使用处理程序和 450 毫秒 的延迟(我没有测试这个的最小限制)- 动画确实有效。它不会滞后,布局会在每次按下按钮时正确显示和隐藏,并且 TextView 会向上移动。但这不完全是我的要求。我需要同时为它们制作动画,甚至更好:在向上移动时延迟 50 毫秒。
使用处理程序和 1 ms 的延迟,布局在第一次按下时显示,TextView 已经在其最终位置(没有移动) .
带有 startDelay 的自定义过渡,它的 react 与没有任何内容的版本一样:TextView.text 被剪切到第一个字母,背景闪烁为白色并消失回到灰色。过渡到似乎没有任何效果,即使使用更大的 startDelay(例如,duration + 200)也没有效果。
fun toggle() {
val duration = 200L
val transitionA = AutoTransition()
transitionA.duration = duration
val transitionB = AutoTransition()
transitionB.startDelay = duration
TransitionManager.beginDelayedTransition(root, transitionA)
val cs = if (!switch) csA2 else csA1
cs.applyTo(root)
val vsB = if (!switch) csB2 else csB1
TransitionManager.beginDelayedTransition(cl,transitionB)
vsB.applyTo(cl)
switch = !switch
btn.text = "switch: $switch"
}
我在 API 27 的模拟器和 API 24 的三星 S6 上对此进行了测试。 其他技术信息:
compileSdkVersion 27
minSdkVersion 21
targetSdkVersion 27
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
Android Studio Version 3.1.2
Android SDK Tools 26.1.1
两个 ConstraintLayouts 的同步动画是否可能?
最佳答案
由于我仍然无法评论(rep 不够),所以我会写在这里,但像评论一样阅读。
您认为 ConstraintSet 是错误的。
如果您只想设置一些可见的东西并将其动画化到另一个位置,则需要制作两个 .xml。它们需要在内部具有相同的 View (无论是否可见),然后通过 TransitionManager 和 ConstraintSets 应用它们。
没有代码的简单示例:
您有一个包含一个 ImageView 的 ConstraintLayout xml。在第一个 xml 中,它被设置在布局的顶部,在第二个中,您将它设置在底部。当您现在克隆这些布局并将一个布局应用到另一个布局时(可能在单击按钮时),它将使 ImageView 从上到下动画化。
再看看 official doc并像那样尝试。如果你理解一次,其实很容易。如果您还有其他问题或希望我给您举一个更好的例子,请尽管提问。
关于Android 动画约束布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50470256/
是否可以为特定(或所有)项目使用多个布局?例如,我有几个项目,我想对其应用两种不同的布局。一个是绿色的,一个是蓝色的(但是)。我想将它们编译到我的输出目录中的两个不同文件夹中(例如v1和v2)。我一直在玩弄规则和编译block,但我不知道这是怎么回事。因为,每个项目在编译过程中只编译一次,我不能告诉nanoc第一次用layout1编译,第二次用layout2编译。我试过这样的东西,但它导致输出文件损坏。compile'*'doifitem.binary?#don’tfilterbinaryitemselsefilter:erblayout'layout1'layout'layout2'
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
动画/*INITIALIZEANANIMATION 初始化一个动画*-----------------------*/lv_anim_ta;lv_anim_init(&a);/*MANDATORYSETTINGS 必选设置*------------------*//*Setthe"animator"function 设置“动画”功能*/lv_anim_set_exec_cb(&a,(lv_anim_exec_xcb_t)lv_obj_set_x);/*Setthe"animator"function*/lv_anim_set_var(&a,obj);/*Lengthoftheanim
文章目录前言约束硬约束的轨迹优化Corridor-BasedTrajectoryOptimizationBezierCurveOptimizationOtherOptions软约束的轨迹优化Distance-BasedTrajectoryOptimization优化方法前言可以看看我的这几篇Blog1,Blog2,Blog3。上次基于MinimumSnap的轨迹生成,有许多优点,比如:轨迹让机器人可以在某个时间点抵达某个航点。任何一个时刻,都能数学上求出期望的机器人的位置、速度、加速度、导数。MinimumSnap可以把问题转换为凸优化问题。缺点:MnimumSnap可以控制轨迹一定经过中间的
我想为网站的管理和公共(public)部分设置一对样式指南。每个都需要自己的布局,其中包含静态html和调用erbpartials的混合(因此静态页面不会削减它)。我不需要Controller来为这些页面提供服务,而且我不希望有效的仅开发内容使其余代码困惑。这让我想知道是否有一种方法可以直接呈现布局。免责声明:我明白这不是我应该经常/永远做的事情,而且我知道有很多争论可以解释为什么这是一个坏主意。我对这是否可能感兴趣。有没有办法让我直接从routes.rb渲染布局而不通过Controller? 最佳答案 出于某种奇怪的原因,我想暂时
这个问题在这里已经有了答案:differentlayoutforsign_inactionindevise(8个答案)关闭7年前。如何更改设计Controller中的布局?
有人知道如何使用Carrierwave+MiniMagick将动画GIF压缩到第一帧吗? 最佳答案 我认为MiniMagick有一些变化,因为我只花了三个小时试图找出为什么Andrey的代码对我不起作用。我收到以下错误:ActiveRecord::RecordInvalid(Validationfailed:ImageFailedtomanipulatewithMiniMagick,maybeitisnotanimage?OriginalError:Command("mogrify-scene/var/folders/0o/0oqN
在我的routes.rb文件中,我想使用rails3中的子域约束功能,但是我想从catchall路由中排除某些域。我不想在特定的子域中有特定的Controller。这样做的最佳做法是什么。#thissubdomainidontwantallofthecatchallroutesconstraints:subdomain=>"signup"doresources:usersend#hereIwanttocatchallbutexcludethe"signup"subdomainconstraints:subdomain=>/.+/doresources:carsresources:sta
我有一个表students,字段为ward_id,我必须创建一个名为guardian_users的表,字段为id,ward_id,email,guardian_id,hashed_password等现在我必须添加约束外键。学生中的任何更新/删除/编辑/插入应该对guardian_users具有相同的效果。我如何在Rails2.3.5中做到这一点?students表存在,但其他表还不存在。 最佳答案 您要么需要foreign_key_migrations插件或#execute方法。假设您使用插件:classCreateGuardi