From:http://blog.csdn.net/xiadik/article/details/41648181
package com.wangran.beautiful_girl_show.view; import com.wangran.beautiful_girl_show.view.photoview.PhotoView;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.util.AttributeSet; /**
* 可显示进度的ImageView
* @author 夏小川
*/
public class ProgressImageView extends ImageView {
private static final String TAG = "ProgressImageView";
private Context mContext;
public static final int FONT_SIZE = 14;
public static final int ROUND_WIDTH = 50;
public static final int STROKE_WIDTH = 7;
private int mFontSize;
private int mRoundWidth;
private int mStrokeWidth;
private Paint mPaint;
private boolean mShowProgress;
private int mProgress;
private float mTextY;
private int mCenterX;
private int mCenterY;
private int mRadius;
private RectF mOval; public ProgressImageView(Context context) {
super(context);
mContext = context;
} public ProgressImageView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
} private void init() {
float scale = mContext.getResources().getDisplayMetrics().density; mFontSize = (int) (FONT_SIZE * scale);
mRoundWidth = (int) (ROUND_WIDTH * scale);
mStrokeWidth = (int) (STROKE_WIDTH * scale); mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(mFontSize); mCenterX = getWidth() / 2;
mCenterY = getHeight() / 2;
mRadius = mRoundWidth / 2; mTextY = mCenterY + mFontSize * 11.0f / 28; mOval = new RectF(mCenterX - mRadius, mCenterY - mRadius, mCenterX
+ mRadius, mCenterY + mRadius);
} public void onDraw(Canvas canvas) {
if (mShowProgress) {
if (mCenterX == 0 || mCenterY == 0) {
init();
}
// 画最外层的大圆环
mPaint.setColor(Color.DKGRAY);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(mStrokeWidth);
canvas.drawCircle(mCenterX, mCenterY, mRadius, mPaint); // 画进度百分比
mPaint.setStrokeWidth(0);
mPaint.setColor(Color.WHITE);
mPaint.setTypeface(Typeface.MONOSPACE);
mPaint.setTextAlign(Paint.Align.CENTER);
String progressStr = mProgress + "%";
canvas.drawText(progressStr, mCenterX, mTextY, mPaint); // 画圆环的进度
mPaint.setStrokeWidth(mStrokeWidth);
mPaint.setColor(Color.WHITE);
canvas.drawArc(mOval, 0, 360 * mProgress / 100, false, mPaint);
} else {
super.onDraw(canvas);
}
} public void startProgress() {
mShowProgress = true;
setProgress(0);
} public void setProgress(int progress) {
if (mShowProgress) {
mProgress = progress;
invalidate();
}
} public void closeProgress() {
mShowProgress = false;
}
}

Android自定义控件之圆形进度条ImageView的更多相关文章

  1. Android 自定义 View 圆形进度条总结

    Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...

  2. android 自定义图片圆形进度条

    感觉话一个圆形进度条挺简单的 ,但是却偏偏给了几张图片让你话,说实话我没接触过,感觉好难,还好百度有大把的资源,一番努力下终于画出来了. 代码如下. package com.etong.cpms.wi ...

  3. Android自定义控件系列之应用篇——圆形进度条

    一.概述 在上一篇博文中,我们给大家介绍了Android自定义控件系列的基础篇.链接:http://www.cnblogs.com/jerehedu/p/4360066.html 这一篇博文中,我们将 ...

  4. android 自定义控件——(四)圆形进度条

    ----------------------------------↓↓圆形进度条(源代码下有属性解释)↓↓---------------------------------------------- ...

  5. Android 高手进阶,自己定义圆形进度条

    背景介绍 在Android 开发中,我们常常遇到各种各样绚丽的控件,所以,依靠我们Android本身所带的控件是远远不够的,许多时候须要我们自定义控件,在开发的过程中.我们公司遇到了一种须要自己写的一 ...

  6. 【Android 应用开发】 自定义 圆形进度条 组件

    转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...

  7. Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)

      Android 高手进阶(21)  版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明地址:http://blog.csdn.net/xiaanming/article/detail ...

  8. Android 带进度的圆形进度条

    最近项目有个需求,做带进度从下到上的圆形进度条. 网上查了一下资料,发现这篇博客写得不错http://blog.csdn.net/xiaanming/article/details/10298163 ...

  9. Qt自定义控件系列(一) --- 圆形进度条

    本系列主要使用Qt painter来实现一些基础控件.主要是对平时自行编写的一些自定义控件的总结. 为了简洁.低耦合,我们尽量不使用图片,qrc,ui等文件,而只使用c++的.h和.cpp文件. 由于 ...

随机推荐

  1. 常用音频软件:Wavesufer

    作者:桂. 时间:2017-06-02  10:23:39 链接:http://www.cnblogs.com/xingshansi/p/6932408.html 前言 只列举两个自己用过的(wave ...

  2. Windows里配置Apache2.2+PHP5.3+mod_fcgid运行高效的FastCGI模式

    日发现win平台的Apache也可以跑FastCGI模式了,就折腾了一会.FastCGI模式是经实践证明了比传统的模块模式运行效率高很多.记录如下: 一.mod_fcgid配置说明 1.首先下载mod ...

  3. Android_WebServices_源代码分析

    本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/38037989 在Android_WebServices_介绍一文中, ...

  4. 单页应用SPA做SEO的一种清奇的方案

    单页应用SPA做SEO的一种清奇的方案 网上有好几种单页应用转seo的方案,有服务端渲染ssr.有预渲染prerender.google抓AJAX.静态化...这些方案都各有优劣,开发者可以根据不同的 ...

  5. 模拟元素的title属性,自定义Vue指令

    function showTitle(el, title) { const popover = getPopover() const popoverStyle = popover.style if ( ...

  6. CSS3多背景应用

    /*多背景应用*/ .wrapper { width: 640px; height: 1000px; margin: auto; background: url(./images/head.jpg) ...

  7. 0069 如何在Intellij IDEA中查看Spring MVC项目的所有请求与处理方法的映射列表

    @RequestMapping注解分散于Controller中,如何在一个列表中看到所有的请求呢,比如下面这样: File-->Project Structure-->Modules--& ...

  8. PHP学习记录第一篇:Ubuntu14.04下LAMP环境的搭建

    最近一段时间会学习一下PHP全栈开发,将会写一系列的文章来总结学习的过程,以自勉. 第一篇记录一下LAMP环境的安装 0. 安装Apache Web服务器 安装之前先更新一下系统 sudo apt-g ...

  9. Ubuntu 12.04 Subversion及GUI客户端RabbitVCS安装

    (经过一天的使用,发现pygtk的内存泄漏问题严重影响使用,需要打一下deepin ui做的补丁:https://github.com/linuxdeepin/deepin-ui) 1. 类似Tort ...

  10. Android基础总结(八)Service

    服务两种启动方式(掌握) startService 开始服务,会使进程变成为服务进程 启动服务的activity和服务不再有一毛钱关系 bindService 绑定服务不会使进程变成服务进程 绑定服务 ...