自定义按钮进度条
来源:互联网 发布:服务器与域名的关系 编辑:程序博客网 时间:2024/06/06 04:00
- 应用场景: 点击下载的时候,按钮有进度条的显示.
- 使用到的东西:
- 自定义控件
- Handler
- butterknife(很方便findViewById)
- 先看效果图
- 下面上代码
//这是 很简单的自定义控件,主要是动态的计算矩形right 的位置public class ProgressBtn extends Button { private boolean isProgressEnable = true; private long mMax = 100; private long mProgress; private ColorDrawable mBlueBg; /*** * 是否允许进度 * * @param isProgressEnable */ public void setIsProgressEnable(boolean isProgressEnable) { this.isProgressEnable = isProgressEnable; } /** * 设置进度的最大值 * * @param max */ public void setMax(long max) { mMax = max; } /** * 设置进度的当前值 * * @param progress */ public void setProgress(long progress) { mProgress = progress; //重绘进度 invalidate(); } public ProgressBtn(Context context) { super(context); } public ProgressBtn(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { //之前// canvas.drawText("haha", 20, 20, getPaint()); if (isProgressEnable) { if (mBlueBg == null) { mBlueBg = new ColorDrawable(Color.BLUE); } int left = 0; int top = 0; int right = (int) (mProgress * 1.0f / mMax * getMeasuredWidth() + .5f);//动态计算 重点... +.5 是为了四舍五入 int bottom = getBottom(); mBlueBg.setBounds(left, top, right, bottom); mBlueBg.draw(canvas); } super.onDraw(canvas);//默认绘制 }}
- 下面主界面的测试代码,我是用handler 模拟的
public class MainActivity extends AppCompatActivity { private static final int PROGRESS_UPDATE = 0; private static final int END = 1; private MTask mTask; @Bind(R.id.btn_progress) ProgressBtn btnProgress; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case PROGRESS_UPDATE: int i = (int) msg.obj;// btnProgress.setBackgroundColor(Color.BLUE);// btnProgress.setIsProgressEnable(false); btnProgress.setProgress(i); int index = (int) (i * 1.0f / 100 * 100 + .5f); btnProgress.setText(index + "%"); if (i == 100) { btnProgress.setText("下载完成"); btnProgress.setTextColor(Color.BLACK); btnProgress.setProgress(0); mTask = null; } break; case END: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); btnProgress.setMax(100); } @OnClick(R.id.btn_progress) public void onClick() { if (mTask == null) { mTask = new MTask(); new Thread(mTask).start(); } } class MTask implements Runnable { @Override public void run() { for (int i = 0; i <= 100; i++) { SystemClock.sleep(100); Message msg = Message.obtain(); msg.what = PROGRESS_UPDATE; msg.obj = i; mHandler.sendMessage(msg); } } }}
- 需要改进的地方 , 没有暂停按钮,还不实用,
- 没有自定义属性,设置不方便
0 0
- 自定义按钮进度条
- Android自定义View——圆形进度条式按钮
- Android 自定义View——带进度条按钮
- Android自定义视频录制时的带进度条的按钮
- 【Android开发 自定义进度条】既有加减按钮又能用手滑动的进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 自定义进度条
- 理解Lua的Coroutine
- maven重新导入出现java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
- 数据库操作语句大全
- CMD命令详解——其他
- POJ-3687-Labeling Balls
- 自定义按钮进度条
- JdbcTemplate query
- ViewPager轮播图
- Unity 集成OpenCV 【一】
- ti8148 dvrrdk开发小结
- SpringMVC 学习笔记(二) @RequestMapping、@PathVariable等注解
- hdfs 块信息
- 围绕中心匀速,加速,减速转动的动画
- dbus