仿猎豹清理大师波浪效果
转载自:http://blog.csdn.net/chdjj/article/details/38142953
先来看效果:
- package com.example.wavedemo1;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Path;
- import android.os.Handler;
- import android.util.AttributeSet;
- import android.view.View;
- /**
- * @author Rowandjj
- *
- *仿猎豹清理大师波浪效果
- */
- public class WaterWaveView extends View
- {
- private Handler mHandler;
- private long c = 0L;
- private boolean mStarted = false;
- private final float f = 0.033F;
- private int mAlpha = 70;//透明度
- private int mColor = Color.BLUE;
- private float mAmplitude = 6.0F; // 振幅
- private final Paint mPaint = new Paint();
- private float mWateLevel = 0.5F;//水高(0~1)
- private Path mPath;
- public WaterWaveView(Context paramContext)
- {
- super(paramContext);
- init(paramContext);
- }
- public WaterWaveView(Context paramContext, AttributeSet paramAttributeSet)
- {
- super(paramContext, paramAttributeSet);
- init(paramContext);
- }
- /**
- * 开始波动
- */
- public void startWave()
- {
- if (!mStarted)
- {
- this.c = 0L;
- mStarted = true;
- this.mHandler.sendEmptyMessage(0);
- }
- }
- private void init(Context context)
- {
- mPaint.setStrokeWidth(1.0F);
- mPaint.setColor(mColor);
- mPaint.setAlpha(mAlpha);
- mPath = new Path();
- mHandler = new Handler()
- {
- @Override
- public void handleMessage(android.os.Message msg)
- {
- if (msg.what == 0)
- {
- invalidate();
- if (mStarted)
- {
- //不断发消息给自己,使自己不断被重绘
- mHandler.sendEmptyMessageDelayed(0, 60L);
- }
- }
- }
- };
- }
- @Override
- protected void onDraw(Canvas canvas)
- {
- canvas.save();
- mPaint.setAlpha(mAlpha);
- mPaint.setColor(mColor);
- // 得到控件的宽高
- int width = getWidth();
- int height = getHeight();
- // 如果未开始(未调用startWave方法),绘制一个矩形
- if ((!mStarted) || (width == 0) || (height == 0))
- {
- canvas.drawRect(0.0F, height / 2, width, height, mPaint);
- return;
- }
- if (this.c >= 8388607L)
- {
- this.c = 0L;
- }
- //每次onDraw时c都会自增
- this.c = (1L + this.c);
- float f1 = height * (1.0F - mWateLevel);
- int top = (int) (f1 + mAmplitude);
- mPath.reset();
- // 绘制矩形,即水面静止时的高度
- canvas.drawRect(0.0F, top, width, height, mPaint);
- int startX = 0;
- //波浪效果
- while (startX < width)
- {
- int startY = (int) (f1 - mAmplitude* Math.sin(Math.PI* (2.0F * (startX + this.c * width * this.f))/ width));
- canvas.drawLine(startX, startY, startX, top, mPaint);
- startX++;
- }
- canvas.restore();
- }
- /**
- * 设置振幅
- * @param amplitued
- */
- public void setAmplitude(float amplitued)
- {
- mAmplitude = amplitued;
- }
- /**
- * 设置透明度
- * @param alpha
- */
- public void setWaterAlpha(float alpha)
- {
- this.mAlpha = ((int) (255.0F * alpha));
- mPaint.setAlpha(this.mAlpha);
- }
- /**
- * 设置颜色
- * @param color
- */
- public void setColor(int color)
- {
- this.mColor = color;
- }
- /**
- * 设置水面高度
- * @param paramFloat
- */
- public void setWaterLevel(float paramFloat)
- {
- mWateLevel = paramFloat;
- }
- @Override
- protected void onAttachedToWindow()
- {
- super.onAttachedToWindow();
- // 关闭硬件加速,防止异常unsupported operation exception
- this.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
- }
- }
- <com.example.wavedemo1.WaterWaveView
- android:id="@+id/wav"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- />
然后在代码中通过调用startWave方法使水面开始波动,同时可以调用set方法控制其属性。
仿猎豹清理大师波浪效果相关推荐
- 【安卓笔记】仿猎豹清理大师波浪效果
先来看效果: 实现方式----->自定义控件 核心代码: [java] view plain copy package com.example.wavedemo1; import android ...
- Android 自定义控件-高仿猎豹清理大师自定义内存开口圆环控件
技术:Android+java 概述 看见猎豹清理大师的内存开口圆环比例进度 挺有意思的,于是就是想自己实现下这样的效果,于是反编译了猎豹清理 大师的app看了下,原来是有两张图,于是脑子里就过了下思 ...
- Android 自定义View修炼-高仿猎豹清理大师自定义内存开口圆环比例进度View
一.概述 看见猎豹清理大师的内存开口圆环比例进度 挺有意思的,于是就是想自己实现下这样的效果,于是反编译了猎豹清理 大师的app看了下,原来是有两张图,于是脑子里就过了下思路,利用上下两张图,旋转上面 ...
- Android动画定时lnvaliate,猎豹清理大师波浪动画实现
感谢段大师的指导! 波浪效果源码: 自定义控件:实现 package com.apidemos2.animation.bezierview; import android.content.Contex ...
- 猎豹清理大师波浪动画实现
感谢段大师的指导! 波浪效果源码: 自定义控件:实现 package com.apidemos2.animation.bezierview;import android.content.Context ...
- 【安卓注意事项】模仿猎豹清理大师波效应
先来看效果: 实现方式----->自己定义控件 核心代码: package com.example.wavedemo1; import android.content.Context; impo ...
- 系统清理软件测试,用户体验最好的清理APP 猎豹清理大师软件评测
从iOS7升级到iSO8,让iPhone用户意识到一个问题--手机空间又不够用了!对于iPhone而言,想获得更多的可用空间,只能靠删之前的照片视频和重装APP清理缓存等方式来挤出更多空间.而对于安卓 ...
- PMCAFF微课堂|猎豹清理大师亿万用户量产品背后的紫牛方法论,傅盛不会说的秘密...
嘉宾简介 分享主题 猎豹清理大师亿万用户量产品背后的紫牛方法论,付盛不会说的秘密 分享简介 分享形式:微信群分享 分享时长:1-2小时 课程大纲 1.分享猎豹清理大师亿万用户量产品背后的故事 2.什么 ...
- CSS3高仿百度外卖头像波浪效果
好Q啼的头像,说好的波浪捏,浪到哪里去了,别急,静静欣赏动态效果:链接:https://pan.baidu.com/s/1gfAM3y7 密码:wxn6 技术: 1.css water wave 实现 ...
最新文章
- LeetCode--258--各位相加*
- 河北科技创新平台年报系统 - 头脑风暴会
- 大剑无锋之如何查看一个java进程的堆内存使用情况(jps,jstack,jmap)【面试推荐】
- Xamarin.Forms 5.0 项目实战发布!
- Java CharArrayWriter size()方法与示例
- C Tricks(四)—— 从数组中随机选择一个元素
- MFC隐藏EditControl控件的光标
- VC中调用 Excel 的总结
- java sqlite sqlite_busy_sqlite3 busy timeout
- 什么是URL?URL是什么意思?
- 一个好用的数学公式编辑器的下载安装(LaTeX)
- Ubuntu 22.04 双网卡网关设置报错:Conflicting default route declarations for IPv4
- h5 php 拍照上传图片,H5拍照、选择图片上传组件核心
- 腾讯云 linux pptpd 搭建 和遇到的部分问题解决
- win32 绘制超酷界面(二)
- 《易经》 数中以9最为奇妙
- tkinter--画布
- 米米商城项目实战(含项目源码)
- python print时清除上一行_python3,如何用print清除行覆盖?
- 解决华为笔记本安装驱动后浏览器频闪
热门文章
- ps beta爱国版下载全过程
- php编程狼追兔子,C语言狼追兔子问题
- vant 做表格_Vant Cell 单元格
- mysql查询比对提速_MySQL查询性能优化
- c语言中strcpy函数的功能是,strcpy函数的作用是是什么?
- 因乐视网IPO财务造假,多位发审委委员被抓;旷视科技完成 4.6亿美元C轮融资丨价值早报
- Manjaro Linux 连接蓝牙鼠标后重启电脑得重新连接 解决方案
- js 判断值是否为数字
- PHP支付宝支付事务,php实现支付宝app支付和异步通知的代码实例
- 《代码大全2》第12章 基本数据类型