package com.duguang.baseanimation.ui.imitate.wave; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.ScaleAnimation; import android.widget.FrameLayout; import android.widget.ImageView; import com.duguang.baseanimation.R; public class WaveAnimView extends FrameLayout { private static final int DURATION_DIFF = -1000; private static final int DELAY_DIFF = -100; private ImageView[] mImages = new ImageView[4]; private boolean mWaving = false; private int mDuration = 4000; private int mDelay = 700; private boolean mFlag = true; public WaveAnimView(Context paramContext) { super(paramContext); init(); } public WaveAnimView(Context paramContext, AttributeSet paramAttributeSet) { super(paramContext, paramAttributeSet); init(); } public WaveAnimView(Context paramContext, AttributeSet paramAttributeSet, int paramInt) { super(paramContext, paramAttributeSet, paramInt); init(); } private void init() { LayoutInflater.from(getContext()).inflate( R.layout.activity_imitate_wave_view_pay_anima, this); mImages[0] = ((ImageView) findViewById(R.id.radar_ray_1)); mImages[1] = ((ImageView) findViewById(R.id.radar_ray_2)); mImages[2] = ((ImageView) findViewById(R.id.radar_ray_3)); mImages[3] = ((ImageView) findViewById(R.id.radar_ray_4)); } // ���ã�ֹͣ���� public final void stopAnimation() { if (!mWaving) return; mWaving = false; for (int i = 0; i < mImages.length; i++) { mImages[i].clearAnimation(); ImageView localImageView = mImages[i]; localImageView.setVisibility(View.GONE); } } // ��ʼ���� public void startAnimation(boolean flag) { if (mWaving) return; mWaving = true; mFlag = flag; startNext(flag, 0); } private void startNext(boolean flag, int index) { ImageView image = mImages[index]; image.setVisibility(View.VISIBLE); ScaleAnimation scale; if (flag) { //scale = new ScaleAnimation(1.0F, 14.0F, 1.0F, 14.0F, 1, 0.5F, 1, 0.5F); scale = new ScaleAnimation(1.0F, 4.0F, 1.0F, 4.0F, 1, 0.5F, 1, 0.5F); } else { /*scale = new ScaleAnimation(4.0f, 0.0f, 4.0f, 0.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);*/ scale = new ScaleAnimation(3.0f, 0.0f, 3.0f, 0.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); } AlphaAnimation alpha = new AlphaAnimation(1.0F, 0.0F); AnimationSet set = new AnimationSet(true); set.addAnimation(scale); set.addAnimation(alpha); set.setDuration(flag ? mDuration : mDuration + DURATION_DIFF); set.setFillAfter(true); set.setInterpolator(new AccelerateDecelerateInterpolator()); set.setAnimationListener(new WTSearchAnimationHandler(this, image, index)); image.startAnimation(set); } final class WTSearchAnimationHandler implements Animation.AnimationListener { private ImageView mImage; private int mIndex; public WTSearchAnimationHandler( WaveAnimView paramImageView, ImageView imageView, int index) { mImage = imageView; mIndex = index; } public final void onAnimationEnd(Animation paramAnimation) { mImage.setVisibility(View.GONE); } public final void onAnimationRepeat(Animation paramAnimation) { } public final void onAnimationStart(Animation paramAnimation) { Message msg = new Message(); msg.what = mIndex == mImages.length - 1 ? 0 : mIndex + 1; mHandler.sendMessageDelayed(msg, mFlag ? mDelay : mDelay + DELAY_DIFF); } } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (mWaving) { startNext(mFlag, msg.what); } }; }; public boolean isWaving() { return mWaving; } }