先看效果图,这个加速球是动态的,并且当调用了myView.setRefresh(0.8F);方法后可以从当前值动态降到0再升到80%,期间可以看到颜色的变化。

源码:

package com.ww.view;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Path.Direction;
import android.graphics.Region;
import android.graphics.Region.Op;
import android.os.Handler;
import android.os.Message;
import android.view.View;import java.util.Timer;
import java.util.TimerTask;
//http://www.cnblogs.com/uncle2000/p/3796034.html
public class SimpleWaveView extends View {private Paint Paint = new Paint();private int Color = -141309;private int Alpha = 255;private Path path = new Path();private Handler mHandler;private int Frequency = 128;private long c = 0L;private double PeakSpacing = 3.0D;private float SpeedH = 0.04F;private float SpeedV = 0.033F;private boolean FlagO = true;private boolean FlagR = false;private float Percentage = 0.6F;private float Refresh = 0.0F;private float Amplitude = 3.0F;private int ColorLevel1 = 0;private int ColorLevel2 = 0;private int ColorLevel3 = 0;private float Level1 = 0.0F;private float Level2 = 0.0F;public SimpleWaveView(Context context) {super(context);this.Paint.setStrokeWidth(1.0F);this.Paint.setAlpha(this.Alpha);this.mHandler = new Handler() {public void handleMessage(Message msg) {if ((msg.what != 0) && (msg.what == 1)) {if ((SimpleWaveView.this.Percentage > 0.0D)&& (SimpleWaveView.this.FlagO)) {SimpleWaveView.this.Percentage -= SimpleWaveView.this.SpeedV;} else if (SimpleWaveView.this.Percentage < SimpleWaveView.this.Refresh) {SimpleWaveView.this.FlagO = false;SimpleWaveView.this.Percentage += SimpleWaveView.this.SpeedV;} else {SimpleWaveView.this.FlagO = true;SimpleWaveView.this.FlagR = false;}}SimpleWaveView.this.invalidate();}};new Timer().schedule(new TimerTask() {public void run() {if (SimpleWaveView.this.FlagR)SimpleWaveView.this.mHandler.sendEmptyMessage(1);elseSimpleWaveView.this.mHandler.sendEmptyMessage(0);}}, 0L, this.Frequency);}protected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.save();int width = getWidth();int height = getHeight();if (this.Level1 == 0.0F)this.Paint.setColor(this.Color);else if (this.Level2 == 0.0F) {if ((this.Percentage >= 0.0F) && (this.Percentage < this.Level1))this.Paint.setColor(this.ColorLevel1);elsethis.Paint.setColor(this.ColorLevel2);} else if ((this.Percentage >= 0.0F) && (this.Percentage < this.Level1))this.Paint.setColor(this.ColorLevel1);else if ((this.Percentage >= this.Level1)&& (this.Percentage < this.Level2))this.Paint.setColor(this.ColorLevel2);else if ((this.Percentage >= this.Level2) && (this.Percentage <= 1.0F)) {this.Paint.setColor(this.ColorLevel3);}if ((width == 0) || (height == 0)) {canvas.drawRect(0.0F, height / 2, width, height, this.Paint);return;}if (this.c >= 8388607L) {this.c = 0L;}this.c += 1L;float f1 = height * (1.0F - this.Percentage);int top = (int) (f1 + this.Amplitude);this.path.reset();this.path.addCircle(width / 2, width / 2, width / 2, Path.Direction.CCW);canvas.clipPath(this.path, Region.Op.REPLACE);canvas.drawRect(0.0F, top, width, height, this.Paint);int stopX = 0;while (stopX < width) {int startY = (int) (f1 - this.Amplitude* Math.sin(3.141592653589793D* (2.0D * (stopX * this.PeakSpacing + (float) (this.c * width)* this.SpeedH * 2.0F)) / width));canvas.drawLine(stopX, startY, stopX, top, this.Paint);int i4 = stopX + 1;stopX = i4;}canvas.restore();}/*** Level1在(0%,100%)之间则ColorLevel1,ColorLevel2生效,有两种颜色。Level2在(Level1,100%)之间则ColorLevel1,ColorLevel2,ColorLevel3生效,有三种颜色。* 该方法一旦生效,则setColor()方法自动失效。* @param ColorLevel1 [0%,Level1)之间的波浪的颜色* @param ColorLevel2 Level2生效的情况下,显示为[Level1,Level2)之间的波浪的颜色,Level2不生效的情况下,显示为[Level1,100%]之间的波浪的颜色。* @param ColorLevel3 [Level2,100%]之间的波浪的颜色* @param Level1 第一分界* @param Level2 第二分界,大于Level1生效,否则默认失效。*/public void setWaveDiffrentColor(int ColorLevel1, int ColorLevel2,int ColorLevel3, float Level1, float Level2) {this.ColorLevel1 = ColorLevel1;this.ColorLevel2 = ColorLevel2;this.ColorLevel3 = ColorLevel3;if ((Level1 > 0.0F) && (Level1 < 1.0F))this.Level1 = Level1;if ((Level2 > Level1) && (Level2 < 1.0F))this.Level2 = Level2;}/*** 设置波浪的颜色,如果设置了setWaveDiffrentColor()方法则setColor()自动失效。* @param color波浪颜色*/public void setColor(int color) {this.Color = color;}/*** 从刷新前的高度降到0,然再升到刷新后的高度* @param refresh 刷新之后的高度*/public void setRefresh(float refresh) {if ((refresh >= 0.0F) && (refresh <= 1.0F)) {this.Refresh = refresh;this.FlagR = true;}}public float getAlpha() {return this.Alpha;}/*** 取值0~255之间,255代表不透明。* @param alpha 透明度*/public void setAlpha(int alpha) {if ((alpha >= 0) && (alpha <= 255))this.Alpha = alpha;}public double getPeakSpacing() {return this.PeakSpacing;}/*** 决定了两个波峰之间的距离,该参数越大,波峰之间的距离越小* @param peakSpacing 波间距(反比)*/public void setPeakSpacing(double peakSpacing) {this.PeakSpacing = peakSpacing;}public float getPercentage() {return this.Percentage;}/***  当前波浪停留的位置。取值0~1之间。* @param percentage 百分比*/public void setPercentage(float percentage) {if ((percentage >= 0.0F) && (percentage <= 1.0F))this.Percentage = percentage;}public float getAmplitude() {return this.Amplitude;}/*** 波的高度* @param amplitude 幅度*/public void setAmplitude(float amplitude) {this.Amplitude = amplitude;}public float getSpeedH() {return this.SpeedH;}public float getSpeedV() {return this.SpeedV;}/*** * @param speedH 水平波浪的速度*/public void setSpeedH(float speedH) {this.SpeedH = speedH;}/*** * @param speedV 升降的速度*/public void setSpeedV(float speedV) {this.SpeedV = speedV;}}

使用方法:

LinearLayout ll;com.ww.view.SimpleWaveViewmyview =new com.ww.view.SimpleWaveView(getApplicationContext());ll=(LinearLayout)findViewById(R.id.ll);
ll.addView(myview);myview.setWaveDiffrentColor(0xffff0f04, 0xfffdd803, 0xff00ed04, 0.3F, 0.6F);myview.setRefresh(0.8F);

API :

详细API请参考:http://www.cnblogs.com/uncle2000/p/3796034.html

转子2000的文章!!!

Android加速球、360加速球相关推荐

  1. Android绘图:360加速球

    自定义View 主函数 布局 自定义View public class MyPathView extends View {private Paint mPaint;private Paint mPai ...

  2. android悬浮球代码,Android 仿360悬浮球与加速球

    先来看一张动态图 昨天跟着视频学了如何自定义View并做成仿360悬浮球与加速球的样式 可以看出来,做成的效果有: 点击按钮后退出Activity,呈现一个圆形的悬浮球,可以随意拖动并会自动依靠到屏幕 ...

  3. android 悬浮球动画,Android 仿360悬浮球与加速球

    先来看一张动态图 昨天跟着视频学了如何自定义View并做成仿360悬浮球与加速球的样式 可以看出来,做成的效果有: 点击按钮后退出Activity,呈现一个圆形的悬浮球,可以随意拖动并会自动依靠到屏幕 ...

  4. android 自定义progressbar demo,Android自定义View――动态ProgressBar之模仿360加速球

    在之前一篇文章中我们讲解了三种ProgressBar的做法,详见-><Android 自定义View--自定义ProgressBar >.这一节中我们模仿360加速球制作一个动态Pr ...

  5. java字符下落,重力球,加速下落减速上弹,重力下落,这段代码是看到网上一个关...

    重力球,加速下落减速上弹,重力下落,这段代码是看到网上一个关 这段代码是看到网上一个关于碰壁球修改而成的,用到事件,画图,Timer类package Cheman;import javax.swing ...

  6. android关闭硬件动画加速器,Android中的硬件加速

    从Android 3.0开始,Android的2D渲染管线可以更好的支持硬件加速.硬件加速使用GPU进行View上的绘制操作. 硬件加速可以在一下四个级别开启或关闭: Application Acti ...

  7. 360加速插件谷歌字体服务停止运行

    相信有很多wordpress博客都在使用360的字体加速服务,在谷歌字体被墙时为站长提升加载提速的服务.就在8月31号360团队发出了停止运行的公告: 网站卫士前端公共库停止运行公告 感谢您一直以来给 ...

  8. 百度云加速 ajax,百度云加速或360网站卫士关于WordPress评论缓存的巧妙设置

    开启云加速或网站卫士的html缓存后,文章和页面将缓存到CDN节点,导致用户评论之后无法及时显示,必须等到CDN节点刷新缓存才能展示已有评论. 那么就会出现这样一个问题:当管理员回复了用户评论时,Wo ...

  9. android开发 硬件加速,Android 开发之硬件加速

    (1)定义 所谓硬件加速,指的是把某些计算工作交给专门的硬件来做,而不是和普通的计算工作一样交给 CPU 来处理.这样不仅减轻了 CPU 的压力,而且由于有了专门硬件的处理,这份计算工作的速度也被加快 ...

  10. android 自定义view 硬件加速,Android自定义View(八) -- 硬件加速

    Android自定义View(八) – 硬件加速 今天学习自定义View部分的最有一篇:硬件加速因为无法录制GIF,所以本篇内容基本为原博 本文计划根据HenCoder系列文章进行学习,所以代码风格及 ...

最新文章

  1. 人工智能技术给教育行业带来哪些主要影响?
  2. javascript setinterval 正确的语法
  3. 【常见笔试面试算法题12续集五】动态规划算法案例分析5 01背包练习题
  4. python生成固定长度随机数_python日记——random模块
  5. 服务器挂在公网,如何禁止公司以外的人访问公司网站
  6. 集团性企业数据信息系统解决方案
  7. HTML5七夕情人节表白网页制作【流星动画3D相册】HTML+CSS+JavaScript
  8. 单片机、ARM与DSP对比
  9. 【蓝桥杯省赛真题34】Scratch九宫格 少儿编程scratch蓝桥杯省赛真题讲解
  10. 如何在 Excel 中使用 SUMIF 函数?
  11. 一点点读懂regulator(一)
  12. 18 获取给定的序列的所有排列, 组合
  13. 一个嘉奖真心做事认真做事的时代
  14. matlab颜色直方图特征提取,灰度直方图特征提取的Matlab实现
  15. 名人养生贴网络疯转 跟李嘉诚们学做长寿优等生
  16. NR/5G - PUSCH repetition次数
  17. 大数据Hadoop系列之HDFS命令讲解
  18. Mac OS X的Spotlight综述
  19. 阴影:box-shodow 每个属性使用与分析
  20. 机载火控计算机测试系统的设计

热门文章

  1. 找东西背后的概率问题——From《思考的乐趣 Martix67数学笔记》
  2. Linux上配置Gaussian的方法
  3. 安防CVR存储系统设计解决方案
  4. java源码社团管理系统_基于jsp的社团管理系统-JavaEE实现社团管理系统 - java项目源码...
  5. 二维小游戏,飞机大战,图片素材
  6. 使用itext,html转pdf使用报错:java.lang.NoSuchMethodError: com.lowagie.text.pdf.BaseFont.getCharBBox(C)
  7. 犯贱报(一张浓缩大学生活的..)
  8. 什么软件画er图方便_如何画好ER图
  9. Unity 工具之 UniWebView 内嵌网页/浏览器到应用中,并且根据UGUI大小放置(简单适配UGUI)
  10. awvs 与 xray联动