`
liming1022
  • 浏览: 8500 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

水波纹的效果

 
阅读更多

今天要实现的是水波纹效果,很炫的哦,可以拿来做一些特效。

以下是代码:

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;
	}
}

 

1
0
分享到:
评论
1 楼 yingli0318 2014-11-27  

相关推荐

    Android 点击出现水波纹效果

    "Android点击出现水波纹效果"就是一种常见的交互设计,它模仿了水面被触碰时产生的涟漪扩散效果,使得用户操作更加生动有趣。这个效果通常应用于按钮、列表项或其他可点击的UI元素上,以提示用户他们的点击已被系统...

    Unity3D水波纹效果

    在本项目中,我们关注的是"Unity3D水波纹效果",这通常涉及到游戏或模拟环境中水面的动态表现,使场景更具有真实感和互动性。 在Unity2018.3.0f2版本中,开发者可以利用内置的图形渲染工具和脚本系统来实现水波纹...

    水波纹效果

    在本文中,我们将深入探讨如何在Flash平台使用ActionScript 3(AS3)实现逼真的水波纹效果。水波纹效果是一种常见的视觉特效,它能够为用户界面增添动态感和交互性,常用于游戏、网页动画或者应用程序的背景设计。AS...

    小程序版解压木鱼,电子木鱼,水波波纹效果

    本文将深入探讨“小程序版解压木鱼”这一话题,包括它的功能、实现原理以及电子木鱼与水波波纹效果的技术细节。 “解压木鱼”是一款以模拟传统木鱼敲击声效为主要内容的应用,旨在帮助用户缓解压力、集中注意力或...

    真实flash水波纹效果

    【真实Flash水波纹效果】是一种在Flash平台上实现的视觉特效,它能够模拟水面波动的动态效果,使得用户在互动时能感受到逼真的水波荡漾。这种效果通常由ActionScript编程语言配合Flash图形和动画工具来创建,通过...

    基于canvas使用three.js制作的立体水波纹效果

    在本文中,我们将深入探讨如何使用three.js库创建一个基于Canvas的立体水波纹效果。three.js是一个流行的JavaScript 3D库,它使得在Web浏览器中进行三维图形编程变得简单。我们将讨论涉及到的关键技术和算法,以及...

    Flex水波纹效果project

    Flex水波纹效果项目是一种基于Adobe Flex技术实现的动态视觉效果,主要应用于用户界面设计,为用户提供更加生动、直观的交互体验。Flex是基于ActionScript 3.0和MXML的开源框架,它允许开发者创建丰富的互联网应用...

    C#水波纹效果

    在C#编程环境中,创建水波纹效果是一种常见的图形编程技术,主要应用于用户界面的动态效果展示或游戏设计。在VS2008(Visual Studio 2008)这个集成开发环境中,开发者可以利用GDI+(Graphics Device Interface Plus...

    制作flash水波纹效果

    在Flash这个强大的动画创作工具中,制作水波纹效果是一项常见的技能,尤其对于网页互动设计、游戏开发或者教学演示来说,生动逼真的水波纹效果能够极大地提升用户体验。本教程将详细讲解如何在Flash中创建出这样的...

    点击水波纹效果

    为了适应不同设备和屏幕尺寸,开发者可能还需要考虑响应式设计,确保水波纹效果在不同分辨率和比例的屏幕上都能正常工作。此外,优化性能也很重要,避免过多的重绘和回流,尤其是在处理大量用户交互时。 总的来说,...

    wpf水波纹效果

    在WPF(Windows Presentation Foundation)中,创建水波纹效果是一项常见的视觉特效任务,它可以为用户界面增添动态感和吸引力。这个"wpf水波纹效果"的代码资源显然是一个实现这种效果的示例,其中可能包含了一些...

    Android 仿猎豹水波纹效果

    "Android 仿猎豹水波纹效果"就是一个这样的例子,它通过模仿自然界中的水波动态,为用户带来生动而真实的交互体验。这一效果通常应用于触摸反馈或者加载动画等场景,使应用更加引人注目。 实现这种水波纹效果主要...

    android 自定义按钮实现水波纹效果

    本文将深入探讨如何在Android中实现一个带有水波纹效果的自定义按钮。水波纹效果,也称为涟漪效果,通常用于触摸反馈,能为用户界面增添生动而现代的视觉体验。 首先,我们需要创建一个新的自定义按钮类,继承自`...

    flash代码实现图片水波纹效果(as3)

    在本文中,我们将深入探讨如何使用ActionScript 3.0(AS3)在Flash CS3环境中实现图片的水波纹效果。水波纹效果是一种动态视觉特效,它可以使静态的图片看起来像是水面波动,增加了图像的生动性和动态感。这个效果在...

    windows 鼠标点击 水波纹 效果

    - **图形库**:开发者可以使用像OpenGL、DirectX或现代的跨平台库如Qt、Unity等,这些库提供了丰富的图形绘制和动画功能,能方便地创建出水波纹效果。 - **编程语言**:常见的编程语言如C++、C#、Java和Python都有...

    react native 实现水波纹效果

    react native 实现水波纹效果,效果非常棒哦

    Android自定义View——贝塞尔曲线实现水波纹效果

    Android自定义View——贝塞尔曲线实现水波纹效果

    flash8做的水波纹效果(含源文件)

    标题中的“flash8做的水波纹效果”是指在Adobe Flash 8这个版本的软件中创建的一个特效,这个特效模拟了水面波动的视觉效果。Flash 8是Adobe公司发布的一款用于制作交互式矢量动画和多媒体内容的工具,它在当时被...

    Android5.0水波纹效果

    在Android开发中,水波纹效果(Ripple Effect)是一种常见的触摸反馈机制,自Android 5.0(Lollipop)引入以来,它为用户界面带来了更生动、更具沉浸感的交互体验。水波纹效果主要体现在按钮、图像、视图等元素上,...

    android水波纹效果

    本篇将深入探讨如何在Android应用中实现水波纹效果,主要分为两种方法:自定义View实现和使用系统自带的RippleDrawable。 首先,我们来看自定义View实现水波纹效果的方法。这通常涉及到对Canvas的深入理解和使用。...

Global site tag (gtag.js) - Google Analytics