Android ProgressBar 之源码解析及扩展应用!
来源:互联网 发布:mac osx yosemite.vdi 编辑:程序博客网 时间:2024/05/16 17:37
Android ProgressBar 之源码解析及扩展应用!
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/74194504
setProgress(int progress)
@android.view.RemotableViewMethod public synchronized void setProgress(int progress) { setProgressInternal(progress, false, false); }
public void setProgress(int progress, boolean animate) { setProgressInternal(progress, false, animate); }
@android.view.RemotableViewMethod synchronized boolean setProgressInternal(int progress, boolean fromUser, boolean animate) { if (mIndeterminate) { // Not applicable. return false; } progress = MathUtils.constrain(progress, 0, mMax); if (progress == mProgress) { // No change from current. return false; } mProgress = progress; refreshProgress(R.id.progress, mProgress, fromUser, animate); return true; }
private synchronized void refreshProgress(int id, int progress, boolean fromUser, boolean animate) { if (mUiThreadId == Thread.currentThread().getId()) { doRefreshProgress(id, progress, fromUser, true, animate); } else { if (mRefreshProgressRunnable == null) { mRefreshProgressRunnable = new RefreshProgressRunnable(); } final RefreshData rd = RefreshData.obtain(id, progress, fromUser, animate); mRefreshData.add(rd); if (mAttached && !mRefreshIsPosted) { post(mRefreshProgressRunnable); mRefreshIsPosted = true; } } }
private synchronized void doRefreshProgress(int id, int progress, boolean fromUser, boolean callBackToApp, boolean animate) { final float scale = mMax > 0 ? progress / (float) mMax : 0; final boolean isPrimary = id == R.id.progress; if (isPrimary && animate) { final ObjectAnimator animator = ObjectAnimator.ofFloat(this, VISUAL_PROGRESS, scale); animator.setAutoCancel(true); animator.setDuration(PROGRESS_ANIM_DURATION); animator.setInterpolator(PROGRESS_ANIM_INTERPOLATOR); animator.start(); } else { setVisualProgress(id, scale); } if (isPrimary && callBackToApp) { onProgressRefresh(scale, fromUser, progress); } }
private void setVisualProgress(int id, float progress) { mVisualProgress = progress; Drawable d = mCurrentDrawable; if (d instanceof LayerDrawable) { d = ((LayerDrawable) d).findDrawableByLayerId(id); if (d == null) { // If we can't find the requested layer, fall back to setting // the level of the entire drawable. This will break if // progress is set on multiple elements, but the theme-default // drawable will always have all layer IDs present. d = mCurrentDrawable; } } if (d != null) { final int level = (int) (progress * MAX_LEVEL); d.setLevel(level); } else { invalidate(); } onVisualProgressChanged(id, progress); }
阅读全文
1 0
- Android ProgressBar 之源码解析及扩展应用!
- Android之ProgressBar配置文件源码
- Android应用Context详解及源码解析
- Android应用Context详解及源码解析
- Android应用Context详解及源码解析
- Android应用Context详解及源码解析
- Android应用Context详解及源码解析
- 【Android】AsyncTask原理应用及源码关键部分解析
- Android笔记之:App模块化及工程扩展的应用
- android progressBar属性解析
- Android ProgressBar应用
- Android源码解析之(十一)-->应用进程启动流程
- Android源码基础解析之应用进程启动流程
- Solr 6.0 学习(九) SolrDispatchFilter源码解析之HttpSolrCall及扩展
- Android之EventBus概述及源码解析(雷惊风)
- Android ProgressBar分析及自定义ProgressBar
- Android源码自带的ProgressBar的总结与扩展——自定义ProgressDialog
- android应用开发之ImageView,SeekBar,TableHost,ProgressBar的使用
- pwn工具箱之house of force
- Android——仿优酷节目筛选功能实现
- 三种实现下拉菜单的方式
- TabLayout、ViewPager与Fragment
- 【Android】当关闭通知权限后无法显示Toast的解决方案V2.0
- Android ProgressBar 之源码解析及扩展应用!
- S5700telnet配置及清除console密码举例
- 5-9 Huffman Codes
- C#读取excel文件数据丢失问题
- 浅谈团队项目管理
- Android Butter Knife 框架——最好用的View注入
- 从输入网址到显示网页的全过程分析
- WEB前端使用 webpack + reack 搭建框架 02 本地服务 与 热替换(react-hot-loader)
- python3脚本使用sql loader批量导入字节文件并二次处理