- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试连续播放多个动画,一个接一个。这些动画要么是简单的变换(将 ImageView 移动一定距离),要么是更复杂的帧动画。
在研究这个问题时,AnimatorSet 起初似乎是一个很好的解决方案。它允许您制作要播放的动画队列,然后按特定顺序执行它们。
// defining an example animation
Animator anim = ObjectAnimator.ofFloat(v, "alpha", 0f)
.setDuration(100);
AnimatorSet set = new AnimatorSet();
// dictating the order in which the animations will be played
set.playSequentially(anim, skewAnim, wobbleAnim);
set.start();
问题是,据我所知,您不能定义一个 Animator 对象以从在 xml 文件中定义的动画中放入 AnimatorSet。
此外,AnimationSet(注意不同的名称)只允许您同时播放多个动画,因此此类不适用于我的目的。
有人知道在您的项目中从 xml 对象定义 Animator 对象的方法吗?或者,是否有其他方法可以完全播放一系列动画?
更新:
AnimatorSet set = new AnimatorSet();
Animator anim1 = AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.sample);
anim1.setTarget(myView1);
Animator anim2 = AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.sample);
anim2.setTarget(myView2);
anim1.setDuration(3000);
anim2.setDuration(3000);
anim1.setInterpolator(new CycleInterpolator(5));
anim2.setInterpolator(new CycleInterpolator(5));
set.playSequentially(anim1,anim2);
set.start();
最佳答案
要从 xml 将动画加载到 AnimatorSet 中,您的 xml 应该包含 AnimatorObjects 而不是动画。然后你可以使用 AnimatorInflater 将这些 animatorObjects 加载到你的 AnimatorSet 中,如下所示:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.sample);
xml 会像这样:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially"
>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"
/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
有关 AnimatorInflater 的更多详细信息,请参阅此链接
要在不同的 View 上播放顺序动画,您可以使用 AnimationListeners。
anim1.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
// start anim2 from here
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}});
关于android - 如何使用 xml 中定义的动画加载 AnimatorSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41151289/
我正在尝试使用 AnimatorSets 链接一组动画。 我有这样的东西: AnimatorSet sequentialSet = new AnimatorSet(); sequentialSet.p
我正在尝试让一个动画在另一个动画结束后开始。我正在使用动画属性并将对象定义为“AnimatorSet”。问题是第一个动画开始时没有问题,但第二个动画从未开始。 public void moveGrou
我需要的是一个可无限重复的 AnimatorSet(由 2 个连续的 animations 组成),同时也是一种在安全的情况下停止这些 animations 的方法方式(即最终状态与起始状态相同)。例
我正在尝试设置一个动画师监听器,所以最终对象动画师会发生一些事情!到目前为止,这是我的代码: as=new AnimatorSet(); as.addListener(new Ani
我需要将以下动画应用于 imageView: 1. alpha (0 -> 1) and scale (0 -> 1) in 500ms 2. pause for 1000ms 3. alpha (1
我想将 View “闪烁”3 倍(缩小和放大,重复 3 倍)。它有效,但不适用于 AnimatorSet。 这个有效: ibOffers.animate().scaleX(0.7f).scaleY(0
我们想在下面的方法中设置结束监听器: private void animation1() { ObjectAnimator scaleXAnimation = ObjectAnima
我无法弄清楚这段代码有什么问题。我通过调用 AnimatorSet.playTogether() 方法一起播放两个 Animator。但是 onAnimationEnd() 回调只被调用一次。为什么会
我已经尝试了几个小时,我觉得是时候放弃了。如何循环在 xml 中定义的 AnimatorSet? 我在单个 objectAnimator 上尝试了 star
我正在使用 Sceneform 创建一个播放动画的 android 应用程序。我正在尝试使用 AnimatorSet 按顺序启动多个 Animator。该代码在尝试播放两个动画时完美运行,但每当我添加
我正在使用 AnimatorSet 创建动画,当它结束时我想将 View 留在原处。 代码是这样的: mLastAnimation = new AnimatorSet(); mLastAnimatio
您好,我正在使用 AnimatorSet 和 ValueAnimator 将多个动画应用到一个 View 。 当用户触摸 View 时,连续的动画会应用到 View 。当用户在 View 上移动手指时
我创建了一个 AnimatorSet s1。 我想使用 s1 AnimatorSet 而不是 R.anim.slide_in_top 。 如何让事务使用s1? private void showsys
我有以下代码,它将图像分成两半并在不同方向为每个部分设置动画: final AnimatorSet mSetAnim = new AnimatorSet(); final Animator topAn
第一次尝试 RoboGuice。到目前为止,注入(inject) View 的一切都运行顺利。 自从我在 tutorial 中看到我可以注入(inject)资源我试图添加一个 AnimatorSet
我正在使用这样的 AnimatorSet playSequentially 方法: AnimatorSet set = new AnimatorSet(); ObjectAnimator in = O
我已经在某些设备上使用 ObjectAnimator 类进行了一些测试,除了一台设备外一切正常:Huawei P8 Lite 2017。 在此设备上,View 在动画开始时“消失”并在结束时“出现”。
这是我需要通过AnimatedVectorDrawableCompat实现的效果。 vector_drawable_anim.xml vector_drawable.xml
我有以下 AnimatorSet 方法: private AnimatorSet dialCenterThrob() { int bpm = workoutStream.getHeartRat
我有一个关于 Android 中的 ObjectAnimator 的问题。我正在尝试模拟一个弹跳效果,其中 View 向上滑动(减小 Y 值)并在相同数量“n”之后返回,然后 View 再次向上和向下
我是一名优秀的程序员,十分优秀!