版本号:1.0 
日期:2014.7.29 2014.7.30
版权:© 2014 kince 转载注明出处
  一键清理是非常多Launcher都会带有的功能,其效果也比較美观。实现方式或许有非常多中,当中常见的是使用图片drawable来完毕的,详细能够參考这篇文章:模仿实现360桌面水晶球式的一键清理特效

本文另辟蹊径,使用自己定义View来完毕相同的效果,性能、效率更高。

  ProgressWheel相信非常多人并不陌生,我參考了当中一些代码。有意思的是,看完它的代码。发现当中隐藏了没有使用的矩形进度条,由于项目名字的原因我预计也永远不会出现了吧。所以就在其基础之上增增改改,形成了ProgressRectangle。为了节省时间。第一版本号并没有使用自己定义的属性,这个以后再加入吧,毕竟有些鸡肋。代码例如以下:
  
/**
*
*/
package com.kince.progressrectangle; import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Paint.Style;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View; /**
* @author kince
* @category 仿solo桌面内存清理效果
* @since 2014.7.30
* @version 1.0.0
* {@link }
*
*/
public class ProgressRectangle extends View { // Sizes (with defaults)
private int layout_height = 0;
private int layout_width = 0;
// Colors (with defaults)
private int bgColor = Color.TRANSPARENT;
private int progressColor = 0xFF339933;
// Paints
private Paint progressPaint = new Paint();
private Paint bgPaint = new Paint();
private Paint titlePaint = new Paint();
private Paint usePaint = new Paint();
// Rectangles
private RectF rectBgBounds = new RectF();
private RectF rectProgressBounds = new RectF(); int progress = 100;
boolean isProgress; private Handler spinHandler = new Handler() {
/**
* This is the code that will increment the progress variable and so
* spin the wheel
*/
@Override
public void handleMessage(Message msg) {
invalidate(); // super.handleMessage(msg);
}
}; /**
* @param context
*/
public ProgressRectangle(Context context) {
super(context);
// TODO Auto-generated constructor stub
} /**
* @param context
* @param attrs
*/
public ProgressRectangle(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
} /**
* @param context
* @param attrs
* @param defStyleAttr
*/
public ProgressRectangle(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
} @Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
// TODO Auto-generated method stub
super.onSizeChanged(w, h, oldw, oldh);
// Share the dimensions
layout_width = w;
Log.i("layout_width", layout_width + ""); layout_height = h;
Log.i("layout_height", layout_height + "");
setupBounds();
setupPaints();
invalidate(); } private void setupPaints() {
// TODO Auto-generated method stub
bgPaint.setColor(bgColor);
bgPaint.setAntiAlias(true);
bgPaint.setStyle(Style.FILL); progressPaint.setColor(progressColor);
progressPaint.setAntiAlias(true);
progressPaint.setStyle(Style.FILL); titlePaint.setColor(Color.WHITE);
titlePaint.setTextSize(20);
titlePaint.setAntiAlias(true);
titlePaint.setStyle(Style.FILL); usePaint.setColor(Color.WHITE);
usePaint.setAntiAlias(true);
usePaint.setTextSize(30);
usePaint.setStyle(Style.FILL); } private void setupBounds() {
// TODO Auto-generated method stub
int width = getWidth(); // this.getLayoutParams().width;
Log.i("width", width + "");
int height = getHeight(); // this.getLayoutParams().height;
Log.i("height", height + "");
rectBgBounds = new RectF(0, 0, width, height);
} @Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas); canvas.drawRect(rectBgBounds, bgPaint); Log.i("progress", progress + "");
rectProgressBounds = new RectF(0, 0, progress, layout_height);
canvas.drawRect(rectProgressBounds, progressPaint);
canvas.drawText("使用内存", 25, 25, titlePaint);
canvas.drawText(progress + "M" + "/1024M", 25, 60, usePaint); } /**
* Increment the progress by 1 (of 100)
*/
public void incrementProgress() {
isProgress = true;
progress++;
if (progress > 200)
progress = 100;
// setText(Math.round(((float) progress / 360) * 100) + "%");
spinHandler.sendEmptyMessage(0);
} /**
* Increment the progress by 1 (of 100)
*/
public void unIncrementProgress() {
isProgress = true;
progress--;
if (progress < 1)
progress = 100;
// setText(Math.round(((float) progress / 360) * 100) + "%");
spinHandler.sendEmptyMessage(0);
} /**
* Set the progress to a specific value
*/
public void setProgress(int i) { progress = i;
spinHandler.sendEmptyMessage(0);
} }
  实现思路也是非常easy的,就是在onDraw()方法里面绘制进度条的背景以及进度。进度的參数是传递进来的数值。Activity的代码例如以下:
package com.kince.progressrectangle;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class RecActivity extends Activity { boolean running;
int progress = 0;
ProgressRectangle progressRectangle; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rec); progressRectangle=(ProgressRectangle) findViewById(R.id.progressBar);
final Runnable r = new Runnable() {
public void run() {
running = true;
while(progress<100) {
progressRectangle.incrementProgress();
progress++;
try {
Thread.sleep(15);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
while(progress>0) {
progressRectangle.unIncrementProgress();
progress--;
try {
Thread.sleep(15);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} running = false;
}
}; Button increment = (Button) findViewById(R.id.btn_increment);
increment.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(!running) {
progress = 0;
Thread s = new Thread(r);
s.start();
}
}
});
}
}

效果例如以下:

  整体来说,就是通过绘制矩形来达到目的。当然。在实际使用中的效果还是有所差异的。欢迎大家反馈、交流。
  <--
  csdn下载:http://download.csdn.net/detail/wangjinyu501/7694607
  gitub地址:https://github.com/wangjinyu501/ProgressRectangle
  -->

Android 一键清理动画的更多相关文章

  1. Android特效专辑(七)——飞机升空特效,一键清理缓存,灵活运用动画会有不一样的感受

    Android特效专辑(七)--飞机升空特效,一键清理缓存,灵活运用属性动画 最近的几篇博文反响还不错,也会继续的写下去的,关于这些特效的专辑,大多数也是借鉴大神的,最近由于工作的关系,会深入的了解一 ...

  2. Android立体旋转动画实现与封装(支持以X、Y、Z三个轴为轴心旋转)

    本文主要介绍Android立体旋转动画,或者3D旋转,下图是我自己实现的一个界面 立体旋转分为以下三种: 1. 以X轴为轴心旋转 2. 以Y轴为轴心旋转 3. 以Z轴为轴心旋转--这种等价于andro ...

  3. Android中矢量动画

    Android中矢量动画 Android中用<path> 标签来创建SVG,就好比控制着一支画笔,从一点到一点,动一条线. <path> 标签 支持一下属性 M = (Mx, ...

  4. Android Animation(动画)

    前言 Android 平台提供实现动画的解决方案(三种) 一.3.0以前,android支持两种动画: (1)Frame Animation:顺序播放事先做好的图像,与gif图片原理类似,是一种逐帧动 ...

  5. android 补间动画和Animation

    介绍: 补间动画是一种设定动画开始状态.结束状态,其中间的变化由系统计算补充.这也是他叫做补间动画的原因. 补间动画由Animation类来实现具体效果,包括平移(TranslateAnimation ...

  6. Android中过场动画

    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left); 第一参数为进入的动画 第二参数为退出的动画 进入的动画 ...

  7. Android 自定义波浪动画 --"让进度浪起来~"

    原文链接:http://www.jianshu.com/p/0e25a10cb9f5 一款效果不错的动画,实现也挺简单的,推荐阅读学习~ -- 由 傻小孩b 分享 waveview <Andro ...

  8. Android 三种动画详解

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.点我开始Android技术交流] 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让 ...

  9. 一键清理Windows垃圾的BAT文件代码

    @echo off color 0atitle win7一键清理系统垃圾echo ★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★☆ ★☆ ★☆★echo ★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★ ...

随机推荐

  1. bzoj 2797 [Poi2012]Squarks 枚举一个,推出所有

    题目大意 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj. 现在所有取法共n*(n-1)/2个和,要你求出X1,X2,...Xn. 输出所有满足条件 ...

  2. yii 数据save后得到插入id

    $model->save();//得到上次插入的Insert id$id = $model->attributes['id'];如此很简单

  3. Day 15 python 之 列表、元组、字典

    基础: #! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "DaChao" # Date: 2017/6/ ...

  4. c#FileStream文件读写

    //C#文件流写文件,默认追加FileMode.Append             string msg = "okffffffffffffffff";            b ...

  5. 对于drawRect使用,谨慎使用!

    #1.drawRect简介drawRect方法在UIView的使用上起着十分关键的作用.不知道大家注意过没有,每一次创建UIView子类文件时候,会有自动带有已注释的drawRect方法,也许从这一点 ...

  6. facebook面试题【转】

    1. 给两个类A和Bclass A {public void foo (A a) { ...}}class B extends A {public void foo (B b) { ...}}问这么写 ...

  7. Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析),兼容Windows和Linux

    兼容windows和linux. 分析: 在windows下路径有以下表示方式: (标准)D:\test\1.txt (不标准,参考linux)D:/test/1.txt 然后在java中,尤其使用F ...

  8. 安装Vmware增强工具

    主机: Win7 虚拟机: VMware8.0+Debian6 目标: 离线安装软件包和VMware Tools 在虚拟机上安装完debian6后 1.在vmware的菜单中选择Vm->inst ...

  9. 数组对象(NSArray和NSMutableArrray)

    Objective-C中除了可以使用C中的基本数组外,如int[5],char word[] ={‘a’,'b’,'c’};Foundation还提供了NSArray类.Foundation是有序的对 ...

  10. 邁向IT專家成功之路的三十則鐵律 鐵律二十二:IT人升遷之道-無為

    升遷管道是許多人求職時相當重要的考量之一,畢竟人除了很愛錢之外更愛顯赫的頭銜,然而在企業中越顯赫的頭銜,其背後通常有更多的罵名,因為許多人的高官厚爵都是踩著一群人的頭頂爬上去的,隨時哪一天跌了下來,都 ...