android纯代码圆周动画

看到支付宝启动界面,很清新,比较绚,于是做了个简单界面,只是完成了动画效果,并集成到一个控件上去,使用起来非常方便,本人较懒,完成这些效果后,就没再走下去了

不多说,上代码

package com.example.test;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.animation.LinearInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

public class CircleAnim extends FrameLayout {

	ImageView iv_anim;
	ImageView iv_anim2;
	int width;
	ObjectAnimator anim;
	ObjectAnimator anim2;
	LayoutParams params;
	LayoutParams params2;

	AnimatorSet animSet;

	public CircleAnim(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		init();
	}

	public CircleAnim(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		init();
	}

	public CircleAnim(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
		init();
	}

	@Override
	protected void onAttachedToWindow() {
		// TODO Auto-generated method stub
		super.onAttachedToWindow();
		animSet.start();
	}

	@Override
	protected void onDetachedFromWindow() {
		// TODO Auto-generated method stub
		super.onDetachedFromWindow();
		animSet.cancel();
	}

	private void init() {
		this.setBackgroundColor(0xFF00285c);
		DisplayMetrics mDisplayMetrics = new DisplayMetrics();// 屏幕分辨率容器
		if (!(getContext() instanceof Activity)) {
			return;
		}

		((Activity) getContext()).getWindowManager().getDefaultDisplay()
				.getMetrics(mDisplayMetrics);
		int w = mDisplayMetrics.widthPixels;
		int h = mDisplayMetrics.heightPixels;
		width = w > h ? h : w;
		iv_anim = new ImageView(getContext());
		iv_anim.setScaleType(ScaleType.FIT_CENTER);
		iv_anim.setImageResource(R.drawable.crile);
		params = new LayoutParams(width, width);
		params.gravity = Gravity.CENTER;
		this.addView(iv_anim, params);

		iv_anim2 = new ImageView(getContext());
		iv_anim2.setScaleType(ScaleType.FIT_CENTER);
		iv_anim2.setImageResource(R.drawable.crile);
		params2 = new LayoutParams((int) (width * 2 / 3), (int) (width * 2 / 3));
		params2.gravity = Gravity.CENTER;
		this.addView(iv_anim2, params2);

		LinearInterpolator polator = new LinearInterpolator();
		anim = ObjectAnimator.ofFloat(iv_anim, "rotation", 0f, 360f);
		anim.setInterpolator(polator);
		anim.setDuration(5000);
		anim.setRepeatCount(-1);

		LinearInterpolator polator2 = new LinearInterpolator();
		anim2 = ObjectAnimator.ofFloat(iv_anim2, "rotation", 360f, 0f);
		anim2.setInterpolator(polator2);
		anim2.setDuration(5000);
		anim2.setRepeatCount(-1);

		animSet = new AnimatorSet();
		animSet.play(anim).with(anim2);
	}

}
以上代码是一个简单的View,继承FrameLayout,然后在里面加了两个ImageView,每个ImageView添加了一个动画,动画就是一个简单的圆周动画,并让他匀速转动,无限转下去,需要注意的是,如果不加LinearInterpolator 的放,默认动画效果会是先慢再快再慢的,整个代码非常简单,使用起来更简单:

package com.example.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		super.onCreate(savedInstanceState);
		setContentView(new CircleAnim(this));
		// setContentView(R.layout.main);
	}

}
里面有张动画图片没有,可以到项目下载地址去下载: 点击下载源码



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ytmfdw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值