上一篇(http://www.cnblogs.com/jaelyn/p/6644194.html)通过手势来改变小球的位置,这次我们使用一个定时器来改变小球的各种状态,这样就能够做出各种动画效果。
效果图:
代码如下:
public class MyView extends View { private String TAG = "MyView"; private Paint paint; private Timer timer; private TimerTask task; private float radius = 100; private int alpha = 255; private float x, y; private float scale = 1; private boolean state = false; public MyView(Context context) { super(context); initView(); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); } public void initView() { Log.d(TAG, "onCreat"); paint = new Paint(); paint.setColor(Color.RED); timer = new Timer(); task = new TimerTask() { @Override public void run() { if (!state) { scale -= 0.01; if (scale < 0) { state = true; scale = 0f; } }else { scale += 0.01; if (scale > 1){ state = false; scale = 1f; } } paint.setAlpha((int) (alpha * scale)); postInvalidate(); } }; } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { Log.d(TAG, "onSizeChanged"); super.onSizeChanged(w, h, oldw, oldh); x = w / 2; y = h / 2; } @Override protected void onDraw(Canvas canvas) { Log.d(TAG, "onDraw"); super.onDraw(canvas); canvas.drawCircle(x, y, radius * scale, paint); } public void starAnim() { timer.schedule(task, 1000, 20); } }
启动timer每隔20毫秒计算 缩放比例、更新页面。
缩放比例沿 1 -> 0 -> 1 变化。
通过画笔设置透明度 范围为 ( 0, 255);
圆点的半径范围:(0, 100);
在通过 view对象开启开启动画 myView.starAnim();
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyView myView = (MyView) findViewById(R.id.myview); myView.starAnim(); } }