https://github.com/tigerjj/ExpandedCircleProgressView
2016-11-10 14:22
363 查看
public class CircleProgressView extends TextView { // ================== CircleProgressView ================== public CircleProgressView(Context context, AttributeSet attrs) { super(context, attrs); initPaints(context); setTextSize(20); setTextColor(Color.WHITE); setGravity(Gravity.CENTER); } // ================== fields ================== private final RectF strokeRect = new RectF(); private final Paint strokePaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final RectF innerCircleRect = new RectF(); private final Paint innerCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final float strokeWidth = 4; private final float innerDistance = 50; private float progress; // ================== fields ================== private void initPaints(Context context) { int color = ContextCompat.getColor(context, R.color.md_light_blue_100); strokePaint.setStyle(Paint.Style.STROKE); strokePaint.setStrokeWidth(strokeWidth); strokePaint.setColor(color); innerCirclePaint.setStyle(Paint.Style.FILL); innerCirclePaint.setColor(color); } // ====================== onSizeChanged ====================== @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { updateStrokeRect(); updateInnerCircleRect(); } private void updateStrokeRect() { float halfStroke = strokeWidth / 2f; strokeRect.set(halfStroke, halfStroke, getWidth() - halfStroke, getHeight() - halfStroke); } private void updateInnerCircleRect() { float innerCircleMaxWidth = getWidth() - innerDistance * 2f; float maxRadius = innerCircleMaxWidth / 2f; float radius = (progress / 100f) * maxRadius; float centerX = getWidth() / 2f; innerCircleRect.set(centerX - radius, centerX - radius, centerX + radius, centerX + radius); } // ====================== onDraw ====================== @Override protected void onDraw(Canvas canvas) { canvas.drawOval(strokeRect, strokePaint); canvas.drawOval(innerCircleRect, innerCirclePaint); super.onDraw(canvas); } // ====================== setProgress ====================== public void setProgress(float progress) { this.progress = progress; updateText(); updateInnerCircleRect(); invalidate(); } private void updateText() { String text = progress + ""; int index = text.indexOf("."); text = text.substring(0, index + 2) + "%"; setText(text); } }
相关文章推荐
- https://github.com/jakob-grabner/Circle-Progress-View
- https://github.com/lzyzsd/CircleProgress
- https://github.com/pwnall/chromeview
- https://github.com/ldoublem/RingProgress
- Github 主页:https://github.com/RunningYoung
- https://github.com/havlenapetr/android_frameworks_base/issues
- git clone https://github.com/azkaban/azkaban.git Cloning into 'azkaban'... fatal: unable to access '
- https://camo.githubusercontent.com/a25916ccc96abf4f949ae55a3fc8b0108ac578a8/687474703a2f2f3764396f30
- https://github.com/mobz/elasticsearch-head#running-with-built-in-server独立的服务启动
- https://github.com/overboming/ZCAnimatedLabel
- https://github.com/mozilla/rhino/tags
- https://github.com/obdev/v-usb
- github FATAL:unable to access 'https://github.com/...: Failed to connect to github.com:443; No error
- Node.JS之妙用初探 https://github.com/rvagg/learnyounode
- https://github.com/Trinea/android-open-project
- 暂时解决unable to access 'https://github.com/Homebrew/brew/': Failed to connect to github.com
- nodejs https://github.com/JacksonTian/eventproxy
- 芒果iOS开发之Unable to add a source with url `https://github.com/CocoaPods/Specs.git` named `master`.
- error: 无法推送一些引用到 'https://github.com/***' 提示:更新被拒绝,因为远程版本库包含您本地尚不存在的提交。这通常是因为另外
- https://github.com/cnodejs/nodeclub