首页 > 系统 > Android > 正文

Android实现自定义华丽的水波纹效果

2019-12-12 05:27:43
字体:
来源:转载
供稿:网友

先来看看效果

实现效果

模拟水波纹的效果:点击屏幕就有圆环出现,半径从小到大,透明度从大到小(0为透明)

实现思路

      1.自定义类继承View。

      2.定义每个圆环的实体类 Wave,并初始化绘制圆环的画笔的数据。

      3.重写onTouchEvent方法,down时,获得坐标点,做为圆环圆心。

      4.发送handler信息,对数据进行修改,刷新页面。

      5.重写onDraw方法,绘制一个圆环。

1. 自定义类继承View

新建WaterWaveView2类继承View

public class WaterWaveView2 extends View {  //存放圆环的集合  private ArrayList<Wave> mList;  //界面刷新  private Handler mHandler = new Handler() {    @Override    public void handleMessage(Message msg) {      invalidate();//刷新界面,会执行onDraw方法    }  };  public WaterWaveView2(Context context) {    this(context, null);  }  public WaterWaveView2(Context context, AttributeSet attrs) {    super(context, attrs);    mList = new ArrayList<Wave>();  }

2. 定义实体类 Wave

/*** Created by HongJay on 2016/8/30.* 把wave的数据封装成一个对象*/public class Wave {  public float x;//圆心x坐标  public float y;//圆心y坐标  public Paint paint; //画圆的画笔  public float width; //线条宽度  public int radius; //圆的半径  public int ranNum;//随机数  public int[] randomColor={Color.BLUE,Color.CYAN,      Color.GREEN,Color.MAGENTA,Color.RED,Color.YELLOW};  public Wave(float x, float y) {    this.x = x;    this.y = y;    initData();  }  /**   * 初始化数据,每次点击一次都要初始化一次   */  private void initData() {    paint=new Paint();//因为点击一次需要画出不同的圆环    paint.setAntiAlias(true);//打开抗锯齿    ranNum=(int) (Math.random()*6);//[0,5]的随机数    paint.setColor(randomColor[ranNum]);//设置画笔的颜色    paint.setStyle(Paint.Style.STROKE);//描边    paint.setStrokeWidth(width);//设置描边宽度    paint.setAlpha(255);//透明度的设置(0-255),0为完全透明    radius=0;//初始化    width=0;  }}

3. 重写onTouchEvent方法
获得圆心,并且删除集合中透明度为0的圆环,通知handler调用onDraw()方法

public boolean onTouchEvent(MotionEvent event) {    super.onTouchEvent(event);    switch (event.getAction()) {      case MotionEvent.ACTION_DOWN:        float x = event.getX();        float y = event.getY();        deleteItem();        Wave wave = new Wave(x, y);        mList.add(wave);        //刷新界面        invalidate();        break;      case MotionEvent.ACTION_MOVE:        float x1 = event.getX();        float y1 = event.getY();        deleteItem();        Wave wave1 = new Wave(x1, y1);        mList.add(wave1);        invalidate();        break;    }    //处理事件    return true;  }  //删除透明度已经为0的圆环  private void deleteItem(){    for (int i = 0; i <mList.size() ; i++) {      if(mList.get(i).paint.getAlpha()==0){        mList.remove(i);      }    }  }}

4. 重写onDraw()方法,循环绘制圆环

protected void onDraw(Canvas canvas) {    super.onDraw(canvas);    //避免程序一运行就进行绘制    if (mList.size() > 0) {      //对集合中的圆环对象循环绘制      for (Wave wave : mList) {        canvas.drawCircle(wave.x, wave.y, wave.radius, wave.paint);        wave.radius += 3;        //对画笔透明度进行操作        int alpha = wave.paint.getAlpha();        if (alpha < 80) {          alpha = 0;        } else {          alpha -= 3;        }        //设置画笔宽度和透明度        wave.paint.setStrokeWidth(wave.radius / 8);        wave.paint.setAlpha(alpha);        //延迟刷新界面        mHandler.sendEmptyMessageDelayed(1, 100);      }    }  }

总结

以上就是Android实现自定义水波纹效果的全部内容,怎么样?实现的效果不错吧,感兴趣的小伙伴们快快自己动手实践起来,希望这篇文章对大家的学习和工作能有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表