博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义ProcessBar
阅读量:6813 次
发布时间:2019-06-26

本文共 2594 字,大约阅读时间需要 8 分钟。

android与其他GUI应用开发一样,也提供了自定义控件的定制。本文中给出一个自定义processbar的例子,如下:

例子中,控件能够定义进度条已实现和未实现的颜色属性,并且用asynctask以每秒一格的速度刷新。

1. 在values下增加attr.xml,定义MyProcessBar的属性

 2. 实现自定义的MyProcessBar类

public class MyProcessbar extends View {    private Paint mPaint;        private int  current = 0;    private int  end     = 10;    private int  color1;    private int  color2;    public MyProcessbar(Context context, AttributeSet attrs) {        super(context, attrs);        mPaint = new Paint();        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyProcessbar);          color1 = a.getColor(R.styleable.MyProcessbar_color1,0);         color2 = a.getColor(R.styleable.MyProcessbar_color2,0);                 a.recycle();    }    public MyProcessbar(Context context) {        super(context);        mPaint = new Paint();    }    //用以更新ProcessBar    public void setCurAndEnd(int cur, int end){        current = cur;        end     = end;        invalidate();    }        @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);                        mPaint.setStyle(Style.FILL);        mPaint.setColor(color1);                for(int i = 0; i < end; i++){            if(i < current){                mPaint.setColor(color1);            }else{                mPaint.setColor(color2);            }                        canvas.drawRect(new Rect(10 + (25*i),                    10,                     20 + (25*i),                     40), mPaint);        }    }}

 3. 在layout中使用该自定义控件

 4. 在Activity中启动一个异步任务更新该控件,异步任务实现如下:

public class MyTask extends AsyncTask
{ private MyProcessbar mprogressbar; public MyTask(MyProcessbar mprogressbar) { super(); this.mprogressbar = mprogressbar; } @Override protected String doInBackground(String... params) { int i = 0; for(i = 0; i < 10; i++){ try { Thread.sleep(1000); publishProgress(i); } catch (InterruptedException e) { e.printStackTrace(); } } return i + "&" + params[0]; } @Override protected void onProgressUpdate(Integer... values) { mprogressbar.setCurAndEnd(values[0], 10); }}

备注:

自定义控件此例中主要用到onDraw方法,其他主要接口还有onMeasure和onLayout,

1. onMeasure 属于View的方法,用来测量自己和内容的来确定宽度和高度 ,view的measure方法体中会调用onMeasure

2. onLayout 属于ViewGroup的方法,用来为当前ViewGroup的子元素的位置和大小

 

转载于:https://www.cnblogs.com/Fredric-2013/archive/2013/03/22/4357590.html

你可能感兴趣的文章
2014华为机试,迷宫矩阵寻找单词的存在与否
查看>>
cxf使用wsdl文件生成代码
查看>>
ASP.NET文件的上传与下载
查看>>
[POI2007]ODW-Weights(贪心)
查看>>
[HNOI2016]树
查看>>
WCF中加密数据信息
查看>>
Linq to sql 语法方法示例
查看>>
Java设计模式-简单工厂模式(Static Factory Method)
查看>>
springMvc + websocket 实现点对点 聊天通信功能
查看>>
mac 下 word 2011 使用笔记
查看>>
mac设置多个屏幕显示的问题
查看>>
智能指针shared_ptr, auto_ptr, scoped_ptr, weak_ptr总结
查看>>
【Todo】已经打开的页面需要清掉的坑
查看>>
常量、变量;基本数据类型;input()、if、while、break、continue
查看>>
仿联想商城laravel实战---7、lavarel中如何给用户发送邮件
查看>>
如何遮挡电影英汉字幕
查看>>
(转)Android开发书籍推荐:从入门到精通系列学习路线书籍介绍
查看>>
函数(一)
查看>>
APICloud连接夜神模拟器--博客园老牛大讲堂
查看>>
C# 访问MongoDB 通用方法类
查看>>