今天要实现的是水波纹效果,很炫的哦,可以拿来做一些特效。
以下是代码:
public class MyWave extends View{ /** * 二个相临波浪中心点的最小距离 */ private static final int DIS_SOLP = 13; /** * true表示开始播放动画 * flase表示动画播放结束 */ protected boolean isRunning = false; /** * 装一个一个的水波纹 */ private ArrayList<Wave> wList; public MyWave(Context context, AttributeSet attrs) { super(context, attrs); wList = new ArrayList<MyWave.Wave>(); } private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { //刷新数据 flushData(); //刷新页面 invalidate(); //循环动画 if (isRunning) { handler.sendEmptyMessageDelayed(0, 50); } }; }; @Override protected void onDraw(Canvas canvas) { //开始画波浪了 for (int i = 0; i < wList.size(); i++) { //圆环的参数 Wave wave = wList.get(i); canvas.drawCircle(wave.pointX, wave.pointY, wave.radius, wave.paint); } } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_MOVE: int x = (int) event.getX(); int y = (int) event.getY(); addPoint(x,y); break; default: break; } return true; } /** * 添加新的水波浪中心点(圆心) * @param x * @param y */ private void addPoint(int x, int y) { if(wList.size() == 0){ addPoint2List(x,y); /* * 第一次启动动画 */ isRunning = true; handler.sendEmptyMessage(0); }else{ //取最后一个波浪 Wave w = wList.get(wList.size()-1); if(Math.abs(w.pointX - x)>DIS_SOLP || Math.abs(w.pointY-y)>DIS_SOLP){ addPoint2List(x,y); } }; } /** * 添加新的波浪 * @param x * @param y */ private void addPoint2List(int x, int y) { //创建了一个水波纹 Wave w = new Wave(); w.pointX = x; w.pointY=y; Paint pa=new Paint(); pa.setColor(colors[(int)(Math.random()*4)]); //设置抗锯齿 pa.setAntiAlias(true); //设置圆的样式-圆环的效果 pa.setStyle(Style.STROKE); w.paint = pa; //添加到列表中 wList.add(w); } private int [] colors = new int[]{Color.BLUE,Color.RED,Color.YELLOW,Color.GREEN}; /** * 刷新数据 */ private void flushData() { for (int i = 0; i < wList.size(); i++) { Wave w = wList.get(i); //如果透明度为 0 从集合中删除 int alpha = w.paint.getAlpha(); if(alpha == 0){ wList.remove(i); //删除i 以后,i的值应该再减1 否则会漏掉一个对象,不过,在此处影响不大,效果上看不出来。 continue; } alpha-=5; //屏蔽非法值 if(alpha<5){ alpha =0; } //降低透明度 w.paint.setAlpha(alpha); //扩大半径 w.radius = w.radius+3; //设置半径厚度 w.paint.setStrokeWidth(w.radius/3); } /* * 如果集合被清空,就停止刷新动画 */ if(wList.size() == 0){ isRunning = false; } } /** * 定义一个水波浪(圆环) * @author afu */ private class Wave { //圆心 int pointX; int pointY; //画笔 Paint paint; //半径 int radius; } }
相关推荐
Android 点击出现水波纹效果,支持两种布局LinearLayout和RelativeLayout
react native 实现水波纹效果,效果非常棒哦
VS2008平台下C#开发的水波纹效果.
flash水波纹效果,跟真的一样,可当互动效果,AS3编写,代码全在里边
android 自定义按钮实现水波纹效果。android 自定义按钮实现水波纹效果
真实flash水波纹效果 看起来非常漂亮,大家快来下载不错的东西
导入工程后可以直接使用的flex水波纹效果
简单、快速制作flash水波纹效果,很实用的。
这个demo有仿猎豹水波纹效果,效果极其逼真,希望大家能够喜欢
windows 鼠标点击 水波纹 效果 解压运行exe 可调整大小 波纹频率 windows 鼠标点击 水波纹 效果 解压运行exe 可调整大小 波纹频率
通过代码实现的图片水波纹效果,非常逼真,as版本3.0,flash版本 flash CS3适用。
小程序版解压木鱼,电子木鱼,水波波纹效果
vue自定义指令(Vue.directive)实现点击水波纹效果
flash8做的水波纹效果(含源文件) 使用flash自带的滤镜实现,效果不错。
使用three.js绘制的具有立体感的水波面效果,里面涉及很多算法,没有思路的同学可以借鉴一下。
百度手机卫士或者360手机卫士,里面的按钮点击效果都是这样的,我们自己实现一个layout,在layout中捕捉事件,并对事件进行相应的处理,在down事件中寻找当前用户点击的是哪个view,找出view所在的矩形区域,将一个...
自定义绚丽水波纹效果,效果很不错,希望可以帮到大家。
Android5.0水波纹效果,适配4.x 详见:http://blog.csdn.net/u012080791/article/details/68065220
博客中讲述的两种动态水波纹效果,可供参考!
iOS雷达和水波纹效果,颜色渐变,已经封装在UIview里面,直接调用即可.