Android 安卓同时制作了两个动画
我使用ValueAnimator以抛物线方式移动图像视图,效果非常好。 现在,我尝试向同一个ImageView添加另一个动画,使用XML代码在其周围旋转。 当我单独使用旋转动画(没有ValueAnimator)时,效果很好,但当我同时启动两个动画时,结果完全错误,图像通过错误的方式,有时会阻塞。 以下是代码:Android 安卓同时制作了两个动画,android,animation,rotation,curve,Android,Animation,Rotation,Curve,我使用ValueAnimator以抛物线方式移动图像视图,效果非常好。 现在,我尝试向同一个ImageView添加另一个动画,使用XML代码在其周围旋转。 当我单独使用旋转动画(没有ValueAnimator)时,效果很好,但当我同时启动两个动画时,结果完全错误,图像通过错误的方式,有时会阻塞。 以下是代码: this.ValueAnimator1 = ValueAnimator.ofFloat(0.0f,1.0f); this.ValueAnimator1.setDuration(4000);
this.ValueAnimator1 = ValueAnimator.ofFloat(0.0f,1.0f);
this.ValueAnimator1.setDuration(4000);
this.ValueAnimator1.addUpdateListener(new AnimatorUpdateListener(){
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float t = ((Float)ValueAnimator1.getAnimatedValue()).floatValue();
float xPos = p0.x*(1-t)*(1-t) +
p1.x*2*t*(1-t) + p2.x*t*t;
float yPos = p0.y*(1-t)*(1-t) +
p1.y*2*t*(1-t) + p2.y*t*t;
ImageView1.setTranslationX(xPos);
ImageView1.setTranslationY(yPos);
}
});
this.Animation1 = AnimationUtils.loadAnimation(this,R.anim.rotation_projectile);
ImageView1.startAnimation(rotationProjectile);
ValueAnimator1.start();
<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="90"
android:pivotX="50%"
android:pivotY="50%"
android:fillEnabled="true"
android:fillAfter="true"
android:duration="4000"
/>
this.ValueAnimator1=ValueAnimator.offload(0.0f,1.0f);
此.ValueAnimator1.setDuration(4000);
this.ValueAnimator1.addUpdateListener(新的AnimatorUpdateListener(){
@凌驾
动画更新上的公共无效(ValueAnimator动画){
float t=((float)ValueAnimator1.getAnimatedValue()).floatValue();
浮点数xPos=p0.x*(1-t)*(1-t)+
p1.x*2*t*(1-t)+p2.x*t*t;
浮动yPos=p0.y*(1-t)*(1-t)+
p1.y*2*t*(1-t)+p2.y*t*t;
ImageView1.setTranslationX(xPos);
ImageView1.setTranslationY(yPos);
}
});
this.Animation1=AnimationUtils.loadAnimation(this,R.anim.rotation\u投射物);
图像视图1.startAnimation(旋转射弹);
值animator1.start();
您可以使用动画师集
一起播放动画
然而,你必须只使用动画师。
这可以通过使用ObjectAnimator
轻松实现
ObjectAnimator rotateAnimator = ObjectAnimator.ofFloat(imageview, "rotation", 0f, 90f);
rotateAnimator.setDuration(4000);
然后使用AnimatorSet.playthee(Animator…项)
如果您想将XML用于动画师
<objectAnimator
android:propertyName="rotation"
android:duration="4000"
android:valueType:"floatType"
android:valueFrom="0f"
android:valueTo="90f" />
我已经试过了,但它说我不能静态引用非静态方法playTogether。我想在触摸屏幕时启动动画,我使用的是OnTouchListener,但通常我应该能够从重写的方法onTouch调用静态方法!您是否静态调用
playthouse()
方法?确保您创建了对象的一个实例AnimatorSet AnimatorSet=new AnimatorSet()
,然后调用AnimatorSet.playtooth()
我在初始响应中添加了一个示例,它起作用了:D,当我看到您编写AnimatorSet.playtooth时,我认为这是一个静态方法,看起来您正在调用一个静态方法:p
final ImageView imageview = (ImageView) findViewById(R.id.imageView);
final ValueAnimator translateAnimator = ValueAnimator.ofFloat(0.0f, 1.0f);
ObjectAnimator rotateAnimator = ObjectAnimator.ofFloat(imageview, "rotation", 0f, 90f);
final AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(translateAnimator, rotateAnimator);
animatorSet.setDuration(4000);
final float x = imageview.getX();
final float y = imageview.getY();
translateAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float t = (Float) translateAnimator.getAnimatedValue();
imageview.setTranslationX(x + t*100); // do your own
imageview.setTranslationY(y + t*100); // thing here
}
});
imageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
animatorSet.start();
}
});