Android自定义控件(特效二) 点击屏幕,根据所点击的位置绘制桃心

先附GIF一张Android自定义控件(特效二) 点击屏幕,根据所点击的位置绘制桃心_第1张图片


思路如下:多次点击屏幕则会绘制多个桃心,所以将这些桃心放到List中。在点击屏幕后调用onTouchEvent,在onTouchEvent里设置桃心的初始状态值,如半径、XY坐标,然后invalidate调用onDraw进行绘制,最后调用Handler来刷新桃心的透明度。

代码如下:

首先在onTouchEvent里设置桃心的初始值



@Override
 public boolean onTouchEvent(MotionEvent event) {
  super.onTouchEvent(event);

  switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
   // 点击屏幕后 半径设为0,alpha设置为255
   MyBean bean = new MyBean();
   bean.radius = 0; // 点击后 半径先设为0
   bean.alpha = MaxAlpha; // alpha设为最大值 255
   bean.X = (int) event.getX(); // 所绘制的圆的X坐标
   bean.Y = (int) event.getY(); // 所绘制的圆的Y坐标
   bean.paint = initPaint(bean.alpha);
   list.add(bean);


   break;
  }
  return true;
 }



在添加到list里后,invalidate调用onDraw,来绘制桃心


path.moveTo(bean.X, bean.Y - 5 * bean.radius);
   // 根据心形函数画图
   for (double j = 0; j <= 2 * Math.PI; j += 0.001) {
    float x = (float) (16 * Math.sin(j) * Math.sin(j) * Math.sin(j));
    float y = (float) (13 * Math.cos(j) - 5 * Math.cos(2 * j) - 2
      * Math.cos(3 * j) - Math.cos(4 * j));
    x *= bean.radius;
    y *= bean.radius;
    x = bean.X - x;
    y = bean.Y - y;
    path.lineTo(x, y);
   }
   canvas.drawPath(path, paint);


最后,调用handler来刷新桃心的半径、透明度

完整Demo:http://download.csdn.net/detail/qq_18612815/9514091



你可能感兴趣的:(Android自定义控件(特效二) 点击屏幕,根据所点击的位置绘制桃心)