以前我自定义的进度条(就是咱们现在工程中用的)是从android的源码中扒出来的一个XML,然后把里面的图片给替换了。一直不知道它的具体原理是什么。



今天得空研究了一下,发现它的原理其实就是用的android提供的一个叫ClipDrawable的类实现的。

于是我就继续深入研究ClipDrawable的用法,研究的结果让我很开心,发现这个类可以很容易实现各种自定义进度条的效果。

ClipDrawable类继承自Drawable,具体用法如下:

1、先自定义一个XML(命名为clip.xml),放在Drawable文件夹下面:

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="horizontal"
android:drawable="@drawable/back_submit_default"
android:gravity="left" > </clip>

2、在界面布局文件layout中引用上面定义的这个ClipDrawable,比如

clip_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<View
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_gravity="center_vertical"
android:background="@drawable/clip" >
</View> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:onClick="stop_ProgressBar"
android:layout_gravity="center_horizontal" />
</LinearLayout>

3、然后在代码中这么写就可以实现随意控制进度条的进度了:

<span style="color:#000000;">        setContentView(R.layout.clip_layout);
View imageview = findViewById(R.id.image); final ClipDrawable drawable = (ClipDrawable) imageview.getBackground();
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 0x1233) {
drawable.setLevel(drawable.getLevel() + 30);
}
}
};
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Message msg = new Message();
msg.what = 0x1233;
handler.sendMessage(msg);
if (drawable.getLevel() >= 10000 || isFinishing()) {
timer.cancel();
}
}
}, 0, 50);</span>

停止进行条:

if(null != timer)
{
timer.cancel(); timer = null;
}

特别说明几个问题:

1、clip.xml这个文件中有几个属性, android:clipOrientation="horizontal"表示水平或竖直;android:gravity="left"表示从左面开始,或从右面开始,或从上面开始,或从下面开始。

2、当然如果是要进度条那么引用的这个图片必然是.9.png格式的啦。



用这种方法可以自定义各种进度条了,非常方便。建议自定义的时候要把你定义的进度条封装成独立的类,这样方便修改和维护。

另外还可以用这种方法实现图片的徐徐展开效果:见http://blog.csdn.net/lee576/article/details/7827676

demo  下载 :http://download.csdn.net/detail/q610098308/9542750

最新文章

  1. 翻译-使用Ratpack和Spring Boot打造高性能的JVM微服务应用
  2. WPF依赖属性详解
  3. OC block的简单使用
  4. 5种JavaScript和CSS交互的方法
  5. 原创: EasyUI Tree 最后一级 节点 横向排列
  6. Eclipse的python插件安装
  7. new 动态分配数组空间 .xml
  8. 【CSS】
  9. 如何搭建ss服务器
  10. hdu 5437 Alisha’s Party 优先队列
  11. 实现简单的django上传文件
  12. linux 系统下配置安装 java jdk 图文流程
  13. USACO Section 5.3 Big Barn(dp)
  14. Mybatis报错:Parameter &#39;list&#39; not found. Available parameters are [groupList, param1]
  15. client_v2.go
  16. Delphi 获取DataSet传入参数后的SQL命令
  17. JS中的加减乘除和比较赋值
  18. MySQL定时备份数据库(全库备份)
  19. sublime text3 安装package control 出现问题解决过程记录
  20. (转)开源项目miaosha(上)

热门文章

  1. objdump 分析
  2. linux性能指令分析进阶篇
  3. Eclipse 中 Tomcat启动卡100%(preparing launch delegate...)
  4. ObjectOutputStream序列化问题
  5. 1月12日,HTML学习笔记2
  6. 庞巴迪TCMS学习笔记之一(IEC 61131-3函数)
  7. Unity 相关经典博客资源总结(持续更新)
  8. 如何解决CDR x8安装时显示“已停止工作”
  9. Centos6---Fail2ban
  10. treeGrid树形数据表格的json数据格式说明