[Android实例] 水下气泡上升界面效果
2016-01-05 11:50
344 查看
该篇文章从eoeAndroid搬迁过来的,原文地址:[Android实例] 水下气泡上升界面效果
首先声明,该效果并不是用动画实现的,而是用自定义View实现的,在onDraw方法里面调用invalidate()函数,实现气泡上升效果
气泡类:
另起线程生成气泡:
绘制渐变背景和气泡:
下载地址:项目代码
首先声明,该效果并不是用动画实现的,而是用自定义View实现的,在onDraw方法里面调用invalidate()函数,实现气泡上升效果
气泡类:
private class Bubble { /** 气泡半径 */ private int radius; /** 上升速度 */ private float speedY; /** 平移速度 */ private float speedX; /** 气泡x坐标 */ private float x; /** 气泡y坐标 */ private float y; }
另起线程生成气泡:
if (!starting) { starting = true; new Thread() { public void run() { while (true) { if(isPause){ continue; } try { Thread.sleep(random.nextInt(3) * 300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Bubble bubble = new Bubble(); int radius = random.nextInt(30); while (radius == 0) { radius = random.nextInt(30); } float speedY = random.nextFloat()*5; while (speedY < 1) { speedY = random.nextFloat()*5; } bubble.setRadius(radius); bubble.setSpeedY(speedY); bubble.setX(width / 2); bubble.setY(height); float speedX = random.nextFloat()-0.5f; while (speedX == 0) { speedX = random.nextFloat()-0.5f; } bubble.setSpeedX(speedX*2); bubbles.add(bubble); } }; }.start(); }
绘制渐变背景和气泡:
Paint paint = new Paint(); // 绘制渐变正方形 Shader shader = new LinearGradient(0, 0, 0, height, new int[] { getResources().getColor(R.color.blue_bright), getResources().getColor(R.color.blue_light), getResources().getColor(R.color.blue_dark) }, null, Shader.TileMode.REPEAT); paint.setShader(shader); canvas.drawRect(0, 0, width, height, paint); paint.reset(); paint.setColor(Color.WHITE); paint.setAlpha(200); List<Bubble> list = new ArrayList<Bubble>(bubbles); for (Bubble bubble : list) { if (bubble.getY() - bubble.getSpeedY() <= 0) { bubbles.remove(bubble); } else { int i = bubbles.indexOf(bubble); if (bubble.getX() + bubble.getSpeedX() <= bubble.getRadius()) { bubble.setX(bubble.getRadius()); } else if (bubble.getX() + bubble.getSpeedX() >= width - bubble.getRadius()) { bubble.setX(width - bubble.getRadius()); } else { bubble.setX(bubble.getX() + bubble.getSpeedX()); } bubble.setY(bubble.getY() - bubble.getSpeedY()); bubbles.set(i, bubble); canvas.drawCircle(bubble.getX(), bubble.getY(), bubble.getRadius(), paint); } }
下载地址:项目代码
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories