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

时间:2021-05-20

先来看看效果

实现效果

模拟水波纹的效果:点击屏幕就有圆环出现,半径从小到大,透明度从大到小(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实现自定义水波纹效果的全部内容,怎么样?实现的效果不错吧,感兴趣的小伙伴们快快自己动手实践起来,希望这篇文章对大家的学习和工作能有所帮助。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章