在使用QQ浏览器的时候,发现下拉刷新时显示三点依次变大并且循环感觉蛮有趣的。在接触自定义View和属性动画后就一直想实现,那么现在就来看看如何实现。
一.自定义一个类MyPointView继承于View,在onDraw()方法里画圆点
public class MyPointView extends View { private MyPointViewEntity mPoint = new MyPointViewEntity(10); public MyPointView(Context context, AttributeSet attr) { super(context,attr); } @Override protected void onDraw(Canvas canvas) { if (mPoint != null) { Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.GRAY); paint.setStyle(Paint.Style.FILL); canvas.drawCircle(50, 50, mPoint.getmRadius(), paint); } super.onDraw(canvas); } void setPointRadius(int radius) { mPoint.setmRadius(radius); invalidate(); } }
其中 MyPointViewEntity是一个实体类,用于初始化圆点的半和设置圆点的半径,代码如下:
public class MyPointViewEntity { private int mRadius; public MyPointViewEntity(int mRadius) { this.mRadius = mRadius; } public int getmRadius() { return mRadius; } public void setmRadius(int mRadius) { this.mRadius = mRadius; } }
二.在Activity里实现相应动画
public class ValueAnimatorActivity extends Activity { private Button mBtn; private MyPointView mPv; private MyPointView mPv1; private MyPointView mPv2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_valueanimator); mBtn = (Button) findViewById(R.id.btn); mPv = (MyPointView) findViewById(R.id.pointview); mPv1 = (MyPointView) findViewById(R.id.pointview1); mPv2 = (MyPointView) findViewById(R.id.pointview2); mBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { doObjectAnimator(); } }); } /* *ObjectAnimator(派生自ValueAnimator) */ private void doObjectAnimator() { ObjectAnimator animator = ObjectAnimator.ofInt(mPv, "pointRadius", 15, 10); ObjectAnimator animator1 = ObjectAnimator.ofInt(mPv1, "pointRadius", 15, 10); ObjectAnimator animator2 = ObjectAnimator.ofInt(mPv2, "pointRadius", 15, 10); final AnimatorSet animSet = new AnimatorSet(); animSet.play(animator).before(animator1); animSet.play(animator1).before(animator2); animSet.setDuration(300); animSet.start(); animSet.addListener(new Animator.AnimatorListener() { @Override public void onAnimation Start(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { animSet.start(); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); }}
本文永久地址:http://blog.it985.com/19307.html
本文出自IT985博客 ,转载时请注明出处及相应链接。