Android_loading动画2

圆点控件

package com.example.loadingviewdemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

/** 圆 */
public class CradleBall extends View {

	private int width;
	private int height;
	private Paint paint;

	public CradleBall(Context context) {
		super(context);
		initView();
	}

	public CradleBall(Context context, AttributeSet attrs) {
		super(context, attrs);
		initView();
	}

	public CradleBall(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		initView();
	}

	private void initView() {
		paint = new Paint();
		paint.setAntiAlias(true);
		paint.setStyle(Paint.Style.FILL);
		paint.setColor(Color.WHITE);
	}

	@Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
		super.onSizeChanged(w, h, oldw, oldh);
		width = w;
		height = h;
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		canvas.drawCircle(width / 2, height / 2, width / 2, paint);
	}
}

圆点动画控件

package com.example.loadingviewdemo;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.CycleInterpolator;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.LinearLayout;

public class NewtonCradleLoading extends LinearLayout {

	private CradleBall cradleBallOne;
	private CradleBall cradleBallTwo;
	private CradleBall cradleBallThree;
	private CradleBall cradleBallFour;
	private CradleBall cradleBallFive;

	private static final int DURATION = 400;
	private static final int SHAKE_DISTANCE = 2;
	private static final float PIVOT_X = 0.5f;
	private static final float PIVOT_Y = -3f;
	private static final int DEGREE = 30;

	private boolean isStart = false;

	public NewtonCradleLoading(Context context) {
		super(context);
		initView(context);
	}

	public NewtonCradleLoading(Context context, AttributeSet attrs) {
		super(context, attrs);
		initView(context);
	}

	@SuppressLint("NewApi")
	public NewtonCradleLoading(Context context, AttributeSet attrs,
			int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		initView(context);
	}

	/** 填充布局 */
	private void initView(Context context) {
		LayoutInflater.from(context).inflate(R.layout.newton_cradle_loading,
				this, true);
	}

	/** 结束填充控件之后 */
	@Override
	protected void onFinishInflate() {
		super.onFinishInflate();
		cradleBallOne = (CradleBall) findViewById(R.id.ball_one);
		cradleBallTwo = (CradleBall) findViewById(R.id.ball_two);
		cradleBallThree = (CradleBall) findViewById(R.id.ball_three);
		cradleBallFour = (CradleBall) findViewById(R.id.ball_four);
		cradleBallFive = (CradleBall) findViewById(R.id.ball_five);

		initAnim();
	}

	RotateAnimation rotateLeftAnimation;// cradleBallOne left to right
	RotateAnimation rotateRightAnimation;// cradleBallFive right to left
	TranslateAnimation shakeLeftAnimation;// 颤抖动画
	TranslateAnimation shakeRightAnimation;

	/** 初始化动画 */
	private void initAnim() {
		rotateRightAnimation = new RotateAnimation(0, -DEGREE,
				RotateAnimation.RELATIVE_TO_SELF, PIVOT_X,
				RotateAnimation.RELATIVE_TO_SELF, PIVOT_Y);
		rotateRightAnimation.setRepeatCount(1);// 重复次数
		rotateRightAnimation.setRepeatMode(Animation.REVERSE);// 重复模式
		rotateRightAnimation.setDuration(DURATION);// 时间
		rotateRightAnimation.setInterpolator(new LinearInterpolator());
		rotateRightAnimation.setAnimationListener(new AnimationListener() {

			@Override
			public void onAnimationStart(Animation arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onAnimationRepeat(Animation arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onAnimationEnd(Animation arg0) {
				// TODO Auto-generated method stub
				if (isStart) {
					startRightAnim();
				}

			}

		});

		shakeLeftAnimation = new TranslateAnimation(0, SHAKE_DISTANCE, 0, 0);
		shakeLeftAnimation.setDuration(DURATION);
		shakeLeftAnimation.setInterpolator(new CycleInterpolator(2));

		rotateLeftAnimation = new RotateAnimation(0, DEGREE,
				RotateAnimation.RELATIVE_TO_SELF, PIVOT_X,
				RotateAnimation.RELATIVE_TO_SELF, PIVOT_Y);
		rotateLeftAnimation.setRepeatCount(1);
		rotateLeftAnimation.setRepeatMode(Animation.REVERSE);
		rotateLeftAnimation.setDuration(DURATION);
		rotateLeftAnimation.setInterpolator(new LinearInterpolator());
		rotateLeftAnimation.setAnimationListener(new AnimationListener() {

			@Override
			public void onAnimationStart(Animation arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onAnimationRepeat(Animation arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onAnimationEnd(Animation arg0) {
				// TODO Auto-generated method stub
				if (isStart) {
					cradleBallTwo.startAnimation(shakeLeftAnimation);
					cradleBallThree.startAnimation(shakeLeftAnimation);
					cradleBallFour.startAnimation(shakeLeftAnimation);

					cradleBallFive.startAnimation(rotateRightAnimation);
				}
			}
		});
		shakeRightAnimation = new TranslateAnimation(0, -SHAKE_DISTANCE, 0, 0);
		shakeRightAnimation.setDuration(DURATION);
		shakeRightAnimation.setInterpolator(new CycleInterpolator(2));
		shakeRightAnimation
				.setAnimationListener(new Animation.AnimationListener() {
					@Override
					public void onAnimationStart(Animation animation) {
						if (isStart)
							startLeftAnim();
					}

					@Override
					public void onAnimationEnd(Animation animation) {

					}

					@Override
					public void onAnimationRepeat(Animation animation) {

					}
				});
	}

	private void startRightAnim() {
		cradleBallTwo.startAnimation(shakeRightAnimation);
		cradleBallThree.startAnimation(shakeRightAnimation);
		cradleBallFour.startAnimation(shakeRightAnimation);
	}

	private void startLeftAnim() {
		cradleBallOne.startAnimation(rotateLeftAnimation);
	}

	public void start() {
		if (!isStart) {
			isStart = true;
			startLeftAnim();
		}
	}

	public void stop() {
		isStart = false;
		cradleBallOne.clearAnimation();
		cradleBallTwo.clearAnimation();
		cradleBallThree.clearAnimation();
		cradleBallFour.clearAnimation();
		cradleBallFive.clearAnimation();
	}

	public boolean isStart() {
		return isStart;
	}
}

使用:

package com.example.loadingviewdemo;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {
	private NewtonCradleLoading newtonCradleLoading;
	private Button button;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.fragment_main);
		newtonCradleLoading = (NewtonCradleLoading) findViewById(R.id.newton_cradle_loading);
		button = (Button) findViewById(R.id.button);

		button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				if (newtonCradleLoading.isStart()) {
					button.setText("开始");
					newtonCradleLoading.stop();
				} else {
					button.setText("结束");
					newtonCradleLoading.start();
				}
			}
		});
	}

}

效果:




demo 地址:

http://download.csdn.net/download/yymonkeydo/9293299


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值