UI

Android学习之环形进度条绘制(包含)

2016-11-07  本文已影响1453人  白令海峡

在写这个之前我很犹豫啊,到底要不要写,因为网上的资料一查一大堆,我也是查阅后才做出来的
but.......还是写下来记录一下吧.....

先上个图:

无标题.png

PS: 中间的文字是由两个TextView和一个view组成,这是我另加的,并没有做成一体,所以以下程序只是画出外面的环

其实关键就在以下几步:

public class MyCircleView extends View{


 private int ScrWidth,ScrHeight;


 private  float Percentage = 0.2f;

 public float getArcWidth() {
     return arcWidth;
 }

 public void setArcWidth(float arcWidth) {
     this.arcWidth = arcWidth;
 }

 private float arcWidth = 30.0f;

 //在measure中测量出自定义view的宽和高
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
     super.onMeasure(widthMeasureSpec, heightMeasureSpec);
      ScrHeight = this.getMeasuredHeight();
      ScrWidth  = this.getMeasuredWidth();

 }
 public MyCircleView(Context context) {
     super(context);
     Log.v("onConstructer1","------------------->>>>");
 }

 @Override
 protected void onFinishInflate() {
     super.onFinishInflate();
     Log.v("onFinishInflate","------------------->>>>");
 }

 public MyCircleView(Context context, AttributeSet attrs) {
     super(context, attrs);
     Log.v("onConstructer2","------------------->>>>");


 }

 public MyCircleView(Context context, AttributeSet attrs, int defStyleAttr) {
     super(context, attrs, defStyleAttr);
     Log.v("onConstructer3","------------------->>>>");

 }
 public void onDraw(Canvas canvas){
     //画布背景
     Log.v("ondraw","------------------->>>>>");
     //画布颜色
     //canvas.drawColor(Color.WHITE);

     //圆的圆心计算
     float cirX = ScrWidth / 2;
     float cirY = ScrHeight / 2 ;

     //圆的半径计算
     float radius = ScrHeight / 2.5f  ;//150;

     //圆和view四周的距离,这个距离的测量主要是为了创建下面的arcRF0和arcRF1
     float arcLeft = cirX - radius;  //圆弧距离view四周的距离
     float arcTop  = cirY - radius ;
     float arcRight = cirX + radius ;
     float arcBottom = cirY + radius ;

     //通过四个点,创建出一个正方形 arcRF0为最底层
     RectF arcRF0 = new RectF(arcLeft ,arcTop,arcRight,arcBottom);
     //创建出arcRF1,为了覆盖在arcRF0上面-2和+2为了更好的覆盖底层
     RectF arcRF1 = new RectF(arcLeft-2,arcTop-2,arcRight+2,arcBottom+2);
     //画笔初始化
     Paint PaintArc = new Paint();
     PaintArc.setAntiAlias(true);//使平滑
         //初始化画笔颜色
         PaintArc.setColor(getResources().getColor(R.color.mxy_blue));
         //PaintArc.setAlpha(1);

         //在一个正方形上面绘制起点为135° 圆饼角度为270,使用画笔为PaintArc
         canvas.drawArc(arcRF0, 135f, 270f, true, PaintArc);

       //画笔颜色调为黄色
       PaintArc.setColor(Color.YELLOW);
       //在一个正方形上面绘制起点为135° 圆饼角度为Percentage,使用画笔为PaintArc,
       canvas.drawArc(arcRF1,135f,Percentage,true,PaintArc);


     //以上完成的是饼图的制作,要编程圆环形状,则需要在中间绘制一个白色的圆
     //画笔颜色调整为白色
     PaintArc.setColor(Color.WHITE);
     //圆心x,y,半径,所用画笔
     canvas.drawCircle(cirX,cirY,radius-arcWidth,PaintArc);

 }
 //此函数用于外界调用,传递进入百分比,即0~1的float,通过调用invaliate函数,
 // 让view重新调用ondraw(),实现更新
 public void refresh(float percent){
     if(percent >1.0f){percent = 1.0f;}
     Percentage = (float)percent*270;
     String str1 = Percentage + "";
     Log.v("start refresh","------------------------->>>>>>>"+ str1);
     this.invalidate();
 }
}
<com.example.myloopprogressview.MyCircleView    
    android:id="@+id/circle"    
    android:layout_width="250dp"   
    android:layout_height="250dp"    
    android:layout_centerInParent="true"   
 />
上一篇下一篇

猜你喜欢

热点阅读