进度条

java
阅读 43 收藏 0 点赞 0 评论 0

txt
Android ProgressBar详解以及自定义




package com.example.circleprogressbar;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

public class CircleProgressBarView extends View { 
        private int progress;        
        private int max;        
        private Paint paint;        
        private RectF oval;  
     
 public int getMax() {
                return max;        
}       
 public void setMax(int max) {     
           this.max = max;       
 }       
 public int getProgress() {       
         return progress;       
 }       

 public void setProgress(int progress) {    
         this.progress = progress;               
         invalidate();      
  }       

 public CircleProgressBarView(Context context, AttributeSet attrs) {     
          super(context, attrs);          
          paint = new Paint();              
          oval = new RectF();        
}     
   @Override        
protected void onDraw(Canvas canvas) {     
            super.onDraw(canvas);                
            paint.setAntiAlias(true);// 设置是否抗锯齿              
            paint.setFlags(Paint.ANTI_ALIAS_FLAG);// 帮助消除锯齿               
            paint.setColor(Color.GRAY);// 设置画笔灰色                
            paint.setStrokeWidth(10);// 设置画笔宽度                
            paint.setStyle(Paint.Style.STROKE);// 设置中空的样式                
            canvas.drawCircle(100, 100, 55, paint);// 在中心为(100,100)的地方画个半径为55的圆,宽度为setStrokeWidth:10,也就是灰色的底边               
            paint.setColor(Color.GREEN);// 设置画笔为绿色               
            oval.set(45, 45, 155, 155);// 设置类似于左上角坐标(45,45),右下角坐标(155,155),这样也就保证了半径为55      
            canvas.drawArc(oval, -90, ((float) progress / max) * 360, false, paint);// 画圆弧,第二个参数为:起始角度,第三个为跨的角度,第四个为true的时候是实心,false的时候为空心               
            paint.reset();// 将画笔重置              
            paint.setStrokeWidth(3);// 再次设置画笔的宽度                
            paint.setTextSize(35);// 设置文字的大小               
            paint.setColor(Color.BLACK);// 设置画笔颜色                

if (progress == max) {                      
  canvas.drawText("完成", 70, 110, paint);                
} else {                     
  canvas.drawText(progress + "%", 70, 110, paint);            
}       
 }}




<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   
 xmlns:tools="http://schemas.android.com/tools"    
 android:layout_width="match_parent"    
android:layout_height="match_parent"    
android:paddingBottom="@dimen/activity_vertical_margin"   
 android:paddingLeft="@dimen/activity_horizontal_margin"   
android:paddingRight="@dimen/activity_horizontal_margin"   
 android:paddingTop="@dimen/activity_vertical_margin"   
 tools:context=".CirclePbActivity" >    

<com.example.circleprogressbar.CircleProgressBarView        
android:id="@+id/circleProgressBar"        
android:layout_width="wrap_content"      
  android:layout_height="wrap_content" />
</RelativeLayout>


package com.example.circleprogressbar;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
public class CirclePbActivity extends Activity { 
       private CircleProgressBarView testConvas;      
  private int i = 0;       
 Handler handler = new Handler() {              
  public void handleMessage(android.os.Message msg) {               
         testConvas.setProgress(msg.what);                       
 if (i <= testConvas.getMax()) {                
               handler.sendEmptyMessageDelayed(i++, 50);     
                   }               
 };       
 };        @Override        
protected void onCreate(Bundle savedInstanceState) {     
           super.onCreate(savedInstanceState);      
          setContentView(R.layout.activity_circle_progressbar);        
         testConvas = (CircleProgressBarView) findViewById(R.id.circleProgressBar);       
         testConvas.setMax(100);               
         handler.sendEmptyMessageDelayed(i++, 50);  
}
}
评论列表


问题


面经


文章

微信
公众号

扫码关注公众号