关于顺序执行的话,你可以尝试一下AnimationListener
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
//在这里开始执行下一个动画即可
}
});
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
//在这里开始执行下一个动画即可
}
});
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();
}}代码比较乱,自己整理下吧。
方法不止一种,关于动画的网上很多资料,不要拘泥于形势,这个是比较简单的了。呵呵。
注:在res目录下新建文件夹时,不要写成anim文件夹哦,还是给你代码吧。呵呵。
JAVA代码
public class MainActivity extends Activity {
private ImageView image1, image2;
private AnimatorSet animatorSet, animatorSet2; @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); animatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(this,
R.animator.scale);
animatorSet2 = (AnimatorSet) AnimatorInflater.loadAnimator(this,
R.animator.scale);
animatorSet.setTarget(image1);
animatorSet2.setTarget(image2);
animatorSet2.setStartDelay(2000);
animatorSet.start();
animatorSet2.start();
} scale.xml的代码。<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together" > <objectAnimator
android:duration="4000"
android:interpolator="@android:anim/linear_interpolator"
android:propertyName="scaleX"
android:repeatCount="infinite"
android:valueFrom="1.0"
android:valueTo="1.5"
android:valueType="floatType" >
</objectAnimator>
<objectAnimator
android:duration="4000"
android:interpolator="@android:anim/linear_interpolator"
android:propertyName="scaleY"
android:repeatCount="infinite"
android:valueFrom="1.0"
android:valueTo="1.5"
android:valueType="floatType" >
</objectAnimator></set>
R.anim.breath_up:
<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:repeatCount="infinite"
android:repeatMode="reverse"/> Animation anim = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.breath_up);
iv.setAnimation(anim);当然这种方法只能实现简单的,取巧了 android:repeatMode="reverse" 。复杂的动画还得使用Animator。