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



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

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

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

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

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

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

  1. clip_layout

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6.  
  7. >
  8. <View
  9. android:id="@+id/image"
  10. android:layout_width="match_parent"
  11. android:layout_height="52dp"
  12. android:layout_gravity="center_vertical"
  13. android:background="@drawable/clip" >
  14. </View>
  15.  
  16. <Button
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:text="New Button"
  20. android:id="@+id/button"
  21. android:onClick="stop_ProgressBar"
  22. android:layout_gravity="center_horizontal" />
  23. </LinearLayout>

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

  1. <span style="color:#000000;"> setContentView(R.layout.clip_layout);
  2. View imageview = findViewById(R.id.image);
  3.  
  4. final ClipDrawable drawable = (ClipDrawable) imageview.getBackground();
  5. final Handler handler = new Handler() {
  6. public void handleMessage(Message msg) {
  7. if (msg.what == 0x1233) {
  8. drawable.setLevel(drawable.getLevel() + 30);
  9. }
  10. }
  11. };
  12. timer = new Timer();
  13. timer.schedule(new TimerTask() {
  14. @Override
  15. public void run() {
  16. Message msg = new Message();
  17. msg.what = 0x1233;
  18. handler.sendMessage(msg);
  19. if (drawable.getLevel() >= 10000 || isFinishing()) {
  20. timer.cancel();
  21. }
  22. }
  23. }, 0, 50);</span>

停止进行条:

  1. if(null != timer)
  2. {
  3. timer.cancel();
  4.  
  5. timer = null;
  6. }

特别说明几个问题:

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

Android使用Drawable资源之使用ClipDrawable资源 实现进入条的更多相关文章

  1. android学习笔记34——ClipDrawable资源

    ClipDrawable ClipDrawable代表从其他位图上截取一个“图片片段” 在XML文件中定义ClipDrawable对象使用<clip.../>元素,该元素的语法为: 以上语 ...

  2. [转]android中drawable资源的解释及例子

    原文链接:         http://blog.csdn.net/wode_dream/article/details/38584693 文章中的内容参考Dev Guide中的Drawable R ...

  3. android的drawable资源

    1.android中可以通过xml文件配置资源,比如字符串啦,整数拉.浮点数等等,当然也可以配置图片资源和选择器,下面我们就看看几种图片资源的配置. @1矩形方框,带渐变色的配置代码 <?xml ...

  4. 使用(Drawable)资源———ClipDrawable资源

    ClipDrawable代表从其他位图上截取的一个"图片片段".在XML文件中定义ClipDrawable对象使用<clip.../>元素,该元素的语法为: <? ...

  5. android源码framework下添加新资源的方法

    编译带有资源的jar包,需要更改frameworks层,方法如下: 一.增加png类型的图片资源 1.将appupdate模块所有用到的png格式图片拷贝到framework/base/core/re ...

  6. Android开发---如何操作资源目录中的资源文件3--圆角边框、背景颜色渐变效果、边框颜色

    Android开发---如何操作资源目录中的资源文件3 效果图 1.圆角边框 2.背景颜色渐变效果 1.activity_main.xml 描述: 定义了一个shape资源管理按钮 <?xml ...

  7. Android开发 ---如何操作资源目录中的资源文件2

    Android开发 ---如何操作资源目录中的资源文件2 一.颜色资源管理 效果图: 描述: 1.改变字体的背景颜色 2.改变字体颜色 3.改变按钮颜色 4.图像颜色切换 操作描述: 点击(1)中的颜 ...

  8. Android开发---如何操作资源目录中的资源文件

    效果图: 1.activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...

  9. 【我的Android进阶之旅】Android使用getIdentifier()方法根据资源名来获取资源id

    有时候我们想动态的根据一个资源名获得到对应的资源id,就可以使用getResources().getIdentifier()方法来获取该id.然后再使用该id进行相关的操作. 1.Demo示例 下面用 ...

随机推荐

  1. 修改phpcms会员登录后头部登陆条的会员名称不带括号

    phpcms会员登录后显示会员名称是带括号的,现在把他修改成不带括号. 找到函数库libs/functions/global.func.php,修改如下即可: function get_nicknam ...

  2. [java]wordcount程序

    词数统计系统. 作业解析:这次作业的内容是从本地读取一个程序代码,计算出这个程序中的行数,单词数,也可进行拓展. 实现语言:java 编程思路: 程序是由各种单词和符号组成的,单词包括关键字,标识符这 ...

  3. JSPatch常见问题解答

    原文地址:https://github.com/bang590/JSPatch/wiki/JSPatch%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E7 ...

  4. 井间数据polarization analysis 相关概念

    1. 垂直分量上记录到的数据,无法记录SH波?这个有待考证,先记录于此~ 两点需要注意:1.层状介质中,P波和深度方向(Z轴)组成入射面;2.SH的定义为垂直于入射面的S波分量. 2.VSP的观测方式 ...

  5. 开始使用Pyhton

    安装 第一个Python程序 首先我们打开python 交互式解释器, 执行如下命令: Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3. ...

  6. XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...

  7. 拜拜了,浮动布局-基于display:inline-block的列表布局

    原创文章,转载请注明来自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com]本文地址:http://www.zhangxinxu.com/wordpress/?p=1194

  8. 自己编写的一个有关安卓应用开发培训PPT

    这个是我自己编写的一个有关安卓应用开发培训PPT,适合新手. 在这里下载PPT

  9. winform中messageBox七个参数的使用(转载)

    private void button1_Click(object sender, EventArgs e) { MessageBox.Show(" 1 个参数 ”); } private ...

  10. sqlserver 对字符串的SUM

    select id,keyword ,max(Confidence) as confidence, TimeRange=stuff((select ','+rtrim(begintime)+'-'+r ...