【安卓笔记】仿猎豹清理大师波浪效果
来源:互联网 发布:window7禁止安装软件 编辑:程序博客网 时间:2024/04/29 23:08
先来看效果:
实现方式----->自定义控件
核心代码:
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(){@Overridepublic void handleMessage(android.os.Message msg){if (msg.what == 0){invalidate();if (mStarted){//不断发消息给自己,使自己不断被重绘mHandler.sendEmptyMessageDelayed(0, 60L);}}}};}@Overrideprotected 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;}@Overrideprotected void onAttachedToWindow(){super.onAttachedToWindow();// 关闭硬件加速,防止异常unsupported operation exceptionthis.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方法控制其属性。
2 0
- 【安卓笔记】仿猎豹清理大师波浪效果
- 仿猎豹清理大师波浪效果
- 猎豹清理大师波浪动画实现
- 仿猎豹垃圾清理(实现原理+源码)
- 仿猎豹垃圾清理(实现原理+源码)
- 仿猎豹垃圾清理(实现原理+源码)
- 仿猎豹垃圾清理(实现原理+源码)
- [Android开发实战]金山清理大师(猎豹清理大师)一键加速快捷方式动画实现
- 【安卓笔记】仿乐安全首页动态效果
- 一键清理大师 v5.6.0 安卓官方版
- 仿iOS猎豹垃圾清理(实现原理+源码)
- 仿清理大师软件管理功能
- Android 仿HTC拉环解锁波浪效果
- 仿猎豹扫描进度
- iOS 仿百度外卖-个人中心(头像波浪效果)
- iOS 仿百度外卖-个人中心(头像波浪效果)
- CSS3高仿百度外卖头像波浪效果
- 安卓动画效果笔记
- 查看java class文件版本的方法
- Java几个常用的命令
- iOS 选取相册图片并裁剪,解决获取图片拉伸问题
- 程序员的十大经验和十大教训
- Auto Reference Counting
- 【安卓笔记】仿猎豹清理大师波浪效果
- JUnit4概述(文章里面的图片没上传)
- 愤怒的时空裂缝你们可是没法看了什么
- 基于ArcGIS Flex API实现动态标绘(1.2)
- jQuery_review之table中根据行选中,进行背景变色和checkbox选中
- 几个数据压缩库介绍
- hdu 4849
- linux 显卡驱动
- Oracle 调用 JAVA 实战(通过 Oracle 存储过程读取服务器目录)