大佬教程收集整理的这篇文章主要介绍了Android 实现自定义圆形进度条的实例代码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Android 自定义圆形进度条
基本思路是这样的:
1.首先绘制一个实心圆
2.绘制一个白色实心的正方形,遮住实心圆
3.在圆的中心动态绘制当前进度的百分比字符
4.绘制一个与之前实心圆相同颜色的空心圆
5.逐渐改变当前的百分比
6.根据百分比,逐渐改变正方形的大小,逐渐减小正方形的底部y轴的坐标,不断重绘,直到达到100%
定义绘制圆形的背景色,和绘制圆形的半径大小
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="circlecolor" format="color"></attr> <attr name="half" format="dimension"></attr> <declare-styleable name="myCircleImage"> <attr name="circlecolor"></attr> <attr name="half"></attr> </declare-styleable> </resources>
自定义视图
import android.Annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.text.TextPaint; import android.util.AttributeSet; import android.util.Log; import android.view.View; public class CirclePro extends View { private Paint paint; privatE int circleBACk;//圆的背景色 privatE int mschedual = 0;//用于控制动态变化 float circleHalf; //圆的半径 String percent = "";//绘制百分比的字符串 @SuppressLint("Recycle") public CirclePro(Context context,AttributeSet attrs,int defStyleAttr) { super(context,attrs,defStyleAttr); paint = new Paint(); TypedArray array = context.getTheme().obtainStyledAttributes(attrs,R.styleable.myCircleImage,defStyleAttr,0); @SuppressWarnings("unused") int leng = array.length(); //获取自定义的属性,这里注意是R.styleable.myCircleImage_circlecolor而不是R.attr.circlecolor circleBACk = array.getColor(R.styleable.myCircleImage_circlecolor,Color.GREEN); circleHalf = array.getDimension(R.styleable.myCircleImage_half,200.f); System.out.println(circleBACk); } /** * 这个构造参数,当在布局文件中引用该view的时候,必须重写该构造函数 * @param context * @param attrs */ public CirclePro(Context context,AttributeSet attrs) { this(context,0);//调用自己的构造函数 } /** * 根据文本的 * @param text * @param textSize * @return */ public float getTextWidth(String text,float textSizE) { TextPaint textPaint = new TextPaint(); textPaint.setTextSize(textSizE); return textPaint.measureText(text); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); float height = getHeight(); float width = getWidth(); // float circleHalf = (float) (width*0.7/2); paint.setColor(circleBACk); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL); canvas.drawCircle(width/2,height/2,circleHalf,paint);//画实心圆 if (mschedual <= 100) {//,如果当前进度小于100,画实心矩形 paint.setColor(Color.WHITE); canvas.drawRect(width/2-circleHalf,height/2-circleHalf,width/2+circleHalf,height/2+circleHalf - mschedual*circleHalf/50,paint); } //画当前进度的字符串 paint.setColor(Color.bLACK); paint.setTextSize(30.f); percent = mschedual+" %"; canvas.drawText(percent,width/2-getTextWidth(percent,30)/2,height/2+paint.getTextSize()*3/8,paint);//字体的高度=paint.getTextSize()*3/4 //画空心圆 paint.setColor(circleBACk); paint.setStyle(Paint.Style.stroke); canvas.drawCircle(width/2,paint); if (mschedual < 100) {//更改当前进度值,并重绘 mscheduaL++; invalidate(); } } }
在activity_main.xml中,需要用到自定义的属性,首先添加命名空间:
xmlns:liu=”http://scheR_49_11845@as.android.com/apk/res/com.example.androidcirclepro”
其中liu是自定义的一个前缀,随意命名的,com.example.androidcirclepro是@R_932_9616@的包名
activity_main.xmln内容如下:
<RelativeLayout xmlns:android="http://scheR_49_11845@as.android.com/apk/res/android" xmlns:tools="http://scheR_49_11845@as.android.com/tools" xmlns:liu="http://scheR_49_11845@as.android.com/apk/res/com.example.androidcirclepro" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.example.androidcirclepro.CirclePro android:layout_width="match_parent" android:layout_height="match_parent" liu:half="90dp" liu:circlecolor="#fff0f0" /> </RelativeLayout>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
以上是大佬教程为你收集整理的Android 实现自定义圆形进度条的实例代码全部内容,希望文章能够帮你解决Android 实现自定义圆形进度条的实例代码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。