我想做一件事情 , 就是两个 动画a1,a2. 让a1执行完了去执行a2
我用了两种方法都 不对 一是:
ImageView iv2=new ImageView(getApplicationContext());
Animation anim2= AnimationUtils.loadAnimation(getApplicationContext(),R.anim.breath_down);
iv2.setImageResource(R.drawable.bubble_red);
iv2.setAnimation(anim2);
R.anim.breath_down中的内容为:
<set xmlns:android = "http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<scale android:fromXScale = "1.0"
android:toXScale = "1.1"
android:fromYScale = "1.0"
android:toYScale = "1.1"
android:pivotX = "0"
android:pivotY = "100%"
android:duration = "4000"
android:fillAfter = "false"
android:fillBefore = "false"
android:repeatCount="infinite"/>
<scale android:fromXScale = "1.1"
android:toXScale = "1.0"
android:fromYScale = "1.1"
android:toYScale = "1.0"
android:pivotX = "0"
android:pivotY = "100%"
android:duration = "4000"
android:fillAfter = "false"
android:fillBefore = "false"
android:startOffset = "4000"
android:repeatCount="infinite"/>
</set>
2是使用:
AnimationSet animationSet=new AnimationSet(true);
ScaleAnimation scaleUp = new ScaleAnimation(1.0f, 1.1f, 1.0f, 1.1f,
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 1.0f);
scaleUp.setDuration(4000);
scaleUp.setRepeatCount(Animation.INFINITE);
animationSet.addAnimation(scaleUp);
ScaleAnimation scaleDown = new ScaleAnimation(1.1f, 1.0f, 1.1f, 1.0f,
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 1.0f);
scaleDown.setDuration(4000);
scaleDown.setRepeatCount(Animation.INFINITE);
scaleDown.setStartOffset(4000);
animationSet.addAnimation(scaleDown);
animationSet.setRepeatCount(Animation.INFINITE);
iv.setAnimation(animationSet);
很多人告诉我AnimationSet 可以 实现两个动画顺序执行 ?为什么不可以!
------解决思路----------------------
关于顺序执行的话,你可以尝试一下AnimationListener
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
//在这里开始执行下一个动画即可
}
});
------解决思路----------------------
3.0之后使用AnimatorSet ,Builder, 3.0之前使用nineoldandroids这个第三方库,不然的话3.0后面只能用动画监听器的方法,属性动画是3.0之后一个非常好的动画包,学习的时候多看最新的apidemo和support demo,具体的用法自己看api吧
------解决思路----------------------
看了你的需求,由于时间比较匆忙,我用了一种比较取巧的方式做出了你要的效果。代码如下:
public class MainActivity extends Activity {
private ImageView image1, image2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image1 = (ImageView) findViewById(R.id.image1);
image2 = (ImageView) findViewById(R.id.image2);
startScale1(image1);
startScale2(image2);
}
public void startScale1(View v) {
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(v, "ScaleX",
1.0f, 1.5f);
objectAnimator1.setRepeatCount(Animation.INFINITE);
objectAnimator1.setInterpolator(new LinearInterpolator());
objectAnimator1.setDuration(4000).start();
ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(v, "ScaleY",
1.0f, 1.5f);
objectAnimator2.setRepeatCount(Animation.INFINITE);
objectAnimator2.setInterpolator(new LinearInterpolator());
objectAnimator2.setDuration(4000).start();
}
public void startScale2(View v) {
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(v, "ScaleX",
1.0f, 1.8f);
objectAnimator1.setRepeatCount(Animation.INFINITE);
objectAnimator1.setInterpolator(new LinearInterpolator());
objectAnimator1.setStartDelay(2000); //用到了开始延迟这个属性,呵呵,比较取巧。
objectAnimator1.setDuration(4000);
objectAnimator1.start();
ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(v, "ScaleY",
1.0f, 1.8f);
objectAnimator2.setRepeatCount(Animation.INFINITE);
objectAnimator2.setInterpolator(new LinearInterpolator());
objectAnimator2.setStartDelay(2000);
objectAnimator2.setDuration(4000);
objectAnimator2.start();
}
}
代码比较乱,自己整理下吧。
方法不止一种,关于动画的网上很多资料,不要拘泥于形势,这个是比较简单的了。呵呵。