`
梦想家dream
  • 浏览: 61669 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Android自定义控件--3(刷新动画)

阅读更多
一个乐动力的刷新动画
package com.example.ledonglidemo;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;

public class GuideView extends ViewGroup {
	/**
	 * 左边的图片
	 */
	private ImageView left;
	/**
	 * 右边的图片
	 */
	private ImageView right;
	/**
	 * 上面的图片
	 */
	private ImageView top;
	/**
	 * 下面的图片
	 */
	private ImageView bottom;
	/**
	 * 中间的图片 m
	 */
	private ImageView center;
	/**
	 * 屏幕的宽度
	 */
	private int screenW;
	/**
	 * 屏幕的高度
	 */
	private int screenH;

	public GuideView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init(context);
	}

	public GuideView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context);
	}

	public GuideView(Context context) {
		super(context);
		init(context);
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		// TODO Auto-generated method stub
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}

	private List<Bitmap> bitmaps = new ArrayList<Bitmap>();

	private void init(Context context) {
		left = new ImageView(context);
		left.setImageBitmap(BitmapFactory.decodeResource(
				context.getResources(), R.drawable.day));
		bitmaps.add(BitmapFactory.decodeResource(context.getResources(),
				R.drawable.day));
		right = new ImageView(context);
		right.setImageBitmap(BitmapFactory.decodeResource(
				context.getResources(), R.drawable.night));
		bitmaps.add(BitmapFactory.decodeResource(context.getResources(),
				R.drawable.night));
		top = new ImageView(context);
		top.setImageBitmap(BitmapFactory.decodeResource(context.getResources(),
				R.drawable.up));
		bitmaps.add(BitmapFactory.decodeResource(context.getResources(),
				R.drawable.up));
		bottom = new ImageView(context);
		bottom.setImageBitmap(BitmapFactory.decodeResource(
				context.getResources(), R.drawable.down));
		bitmaps.add(BitmapFactory.decodeResource(context.getResources(),
				R.drawable.down));
		center = new ImageView(context);
		center.setImageBitmap(BitmapFactory.decodeResource(
				context.getResources(), R.drawable.animation_battery));
		bitmaps.add(BitmapFactory.decodeResource(context.getResources(),
				R.drawable.animation_battery));
		screenW = ((Activity) context).getWindowManager().getDefaultDisplay()
				.getWidth();
		screenH = ((Activity) context).getWindowManager().getDefaultDisplay()
				.getHeight();
		this.addView(center);
		this.addView(left);
		this.addView(right);
		this.addView(top);
		this.addView(bottom);

	}

	private LinearInterpolator interpolator = new LinearInterpolator();

	@Override
	protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
		// TODO Auto-generated method stub
		// 五个控件的布局
		center.layout(screenW / 2 - bitmaps.get(4).getWidth() / 2, screenH / 2
				- bitmaps.get(4).getHeight() / 2, screenW / 2
				+ bitmaps.get(4).getWidth() / 2, screenH / 2
				+ bitmaps.get(4).getHeight() / 2);
		top.layout(screenW / 2 - bitmaps.get(2).getWidth() / 2, screenH / 2
				- bitmaps.get(4).getHeight() / 2 - bitmaps.get(2).getHeight()
				+ bitmaps.get(2).getWidth() / 2 / 4,
				screenW / 2 + bitmaps.get(2).getWidth() / 2, screenH / 2
						- bitmaps.get(4).getHeight() / 2
						+ bitmaps.get(2).getWidth() / 2 / 4);
		left.layout(screenW / 2 - bitmaps.get(0).getWidth() * 2
				- bitmaps.get(0).getWidth() / 4, screenH / 2
				- bitmaps.get(0).getHeight() / 2, screenW / 2
				- bitmaps.get(0).getWidth() - bitmaps.get(0).getWidth() / 4,
				screenH / 2 + bitmaps.get(0).getHeight() / 2);
		right.layout(screenW / 2 + bitmaps.get(1).getWidth()
				+ bitmaps.get(1).getHeight() / 4, screenH / 2
				- bitmaps.get(1).getHeight() / 2, screenW / 2
				+ bitmaps.get(1).getWidth() * 2 + bitmaps.get(1).getHeight()
				/ 4, screenH / 2 + bitmaps.get(1).getHeight() / 2);
		bottom.layout(screenW / 2 - bitmaps.get(3).getWidth() / 2, screenH / 2
				+ bitmaps.get(4).getHeight() / 2 - bitmaps.get(3).getWidth()
				/ 2 / 4, screenW / 2 + bitmaps.get(3).getWidth() / 2, screenH
				/ 2 + bitmaps.get(4).getHeight() / 2
				+ bitmaps.get(3).getHeight() - bitmaps.get(3).getWidth() / 2
				/ 4);
		playCenter();
		playTop();
		playBottom();
		playLeft();
		playRight();
	}

	/**
	 * 右边的动画
	 */
	private void playRight() {
		// 混合动画
		AnimationSet animationSet = new AnimationSet(false);
		RotateAnimation rotateRight = new RotateAnimation(0, 359,
				Animation.ABSOLUTE, screenW / 2 - right.getLeft(),
				Animation.ABSOLUTE, (right.getBottom() - right.getTop()) / 2);
		RotateAnimation rotateSelf = new RotateAnimation(0, -359,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
				0.5f);
		// 播放时间
		rotateSelf.setDuration(10 * 1000);
		// 播放加速的模式
		rotateSelf.setInterpolator(interpolator);
		// 设置无限循环
		rotateSelf.setRepeatCount(-1);
		rotateRight.setDuration(10 * 1000);
		rotateRight.setRepeatCount(-1);
		rotateRight.setInterpolator(interpolator);
		animationSet.addAnimation(rotateSelf);
		animationSet.addAnimation(rotateRight);
		// 播放混合动画
		right.startAnimation(animationSet);
	}

	/**
	 * 左边的动画
	 */
	private void playLeft() {
		AnimationSet animationSet = new AnimationSet(false);
		RotateAnimation rotateLeft = new RotateAnimation(0, 359,
				Animation.ABSOLUTE, screenW / 2 - left.getLeft(),
				Animation.ABSOLUTE, (left.getBottom() - left.getTop()) / 2);
		rotateLeft.setDuration(10 * 1000);
		rotateLeft.setInterpolator(interpolator);
		rotateLeft.setRepeatCount(-1);
		RotateAnimation rotateSelf = new RotateAnimation(0, -359,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
				0.5f);
		rotateSelf.setDuration(10 * 1000);
		rotateSelf.setRepeatCount(-1);
		rotateSelf.setInterpolator(interpolator);
		animationSet.addAnimation(rotateSelf);
		animationSet.addAnimation(rotateLeft);
		left.startAnimation(animationSet);
	}

	/**
	 * 下面的动画
	 */
	private void playBottom() {
		RotateAnimation rotateBottom = new RotateAnimation(0, 359,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.ABSOLUTE, screenH
						/ 2 - bottom.getTop());
		rotateBottom.setDuration(10 * 1000);
		rotateBottom.setInterpolator(interpolator);
		rotateBottom.setRepeatCount(-1);
		bottom.startAnimation(rotateBottom);
	}

	/**
	 * 上面的动画
	 */
	private void playTop() {
		RotateAnimation rotateAnimation = new RotateAnimation(0, 359,
				Animation.ABSOLUTE, screenW / 2 - top.getLeft(),
				Animation.ABSOLUTE, screenH / 2 - top.getTop());
		rotateAnimation.setDuration(10 * 1000);
		rotateAnimation.setInterpolator(interpolator);
		rotateAnimation.setRepeatCount(-1);
		top.startAnimation(rotateAnimation);
	}

	/**
	 * 中间的View动画播放
	 */
	private void playCenter() {
		AnimationSet animationSet = new AnimationSet(false);
		ScaleAnimation scaleSmall = new ScaleAnimation(1.0f, 0.6f, 1.0f, 0.6f,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
				0.5f);
		ScaleAnimation scaleBig = new ScaleAnimation(1.0f, 5.0f / 3, 1.0f,
				5.0f / 3, Animation.RELATIVE_TO_SELF, 0.5f,
				Animation.RELATIVE_TO_SELF, 0.5f);
		scaleBig.setDuration(2 * 1000);
		scaleBig.setInterpolator(interpolator);
		scaleSmall.setDuration(2 * 1000);
		scaleSmall.setStartOffset(2 * 1000);
		scaleSmall.setRepeatCount(-1);
		scaleSmall.setFillEnabled(true);
		scaleSmall.setFillAfter(true);
		scaleBig.setStartOffset(2 * 1000);
		scaleBig.setRepeatCount(-1);
		scaleBig.setFillEnabled(true);
		scaleBig.setFillAfter(true);
		scaleSmall.setInterpolator(interpolator);
		animationSet.addAnimation(scaleBig);
		animationSet.addAnimation(scaleSmall);
		center.startAnimation(animationSet);
	}

}


源码下载戳这里:
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics