效果图:
代码:
这里的layout就不写了,注意view要写全称,包名类名都要写
环形下载:
MyArc
package com.example.administrator.mywidgetmode.Progress;
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.util.Log;
import android.view.View;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by Administrator on 2015/9/16.
*/
public class MyArc extends View {
private int width;
private int height;
private int currentProgress;
private Paint mPaintBackGround;
private Paint mPaintCurrent;
private Paint mPaintText;
private int maxProgress=100;
//得到进度的最大值
public int getMaxProgress() {
return maxProgress;
}
//设置进度的最大值
public void setMaxProgress(int maxProgress) {
this.maxProgress = maxProgress;
}
//得到当前的进度值
public int getCurrentProgress(){
return currentProgress;
}
//设置当前的进度值
public void setCurrentProgress(int currentProgress){
this.currentProgress=currentProgress;
invalidate();//刷新
}
public MyArc(Context context) {
super(context);
}
public MyArc(Context context, AttributeSet attrs) {
super(context, attrs);
mPaintBackGround=new Paint();
mPaintBackGround.setColor(Color.CYAN);
mPaintBackGround.setAntiAlias(true);//消除锯齿
mPaintCurrent=new Paint();
mPaintCurrent.setColor(Color.GREEN);
mPaintCurrent.setAntiAlias(true);
mPaintCurrent.setStyle(Paint.Style.STROKE);
mPaintCurrent.setStrokeWidth(20);
mPaintText=new Paint();
mPaintText.setColor(Color.BLACK);
mPaintText.setTextSize(40);
mPaintText.setTextAlign(Paint.Align.CENTER);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width=getDefaultSize(getSuggestedMinimumWidth(),widthMeasureSpec);
height=getDefaultSize(getSuggestedMinimumHeight(),heightMeasureSpec);
setMeasuredDimension(width,height);//设置画布的大小,长和宽
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.GRAY);//设置画布颜色
RectF oval=new RectF(); //RectF对象
oval.left=width/4; //左边
oval.top=width/4; //上边
oval.right=width/4*3; //右边
oval.bottom=width/4*3; //下边
canvas.drawArc(oval,225, 360*currentProgress/maxProgress,false,mPaintCurrent);
canvas.drawText(currentProgress+"%",width/2,width/2,mPaintText);
}
}
MyArcActivity
package com.example.administrator.mywidgetmode.Progress;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import com.example.administrator.mywidgetmode.R;
/**
* Created by Administrator on 2015/9/16.
*/
public class MyArcActivity extends AppCompatActivity{
private MyArc myArc;
private static final int PROGRESS=0x23;
private Button mBtStart;
private int progress;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case PROGRESS:
progress++;
if(progress<=100){
myArc.setCurrentProgress(progress);
handler.sendEmptyMessageDelayed(PROGRESS,200);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_arc);
myArc= (MyArc) findViewById(R.id.arc);
mBtStart= (Button) findViewById(R.id.button_arc_download);
mBtStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessageDelayed(PROGRESS, 1000);
}
});
}
}
球形下载:
MyPathViewTwo
package com.example.administrator.mywidgetmode.PathView;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by Administrator on 2015/9/18.
*/
public class MyPathViewTwo extends View {
private int width;
private int height;
private Paint mPaintText;
private Paint mPaint;
private Paint mPaintPoint;
private Path path;
private int currentProgress;
private int maxProgress = 100;
private int count=0;
private boolean isAdd=false;
private int size;
public static final int NEED_INVALIDATE=0X23;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case NEED_INVALIDATE:
count+=5;
if(count>80){
count=0;
}
invalidate();//告诉主线程重新绘制
handler.sendEmptyMessageDelayed(NEED_INVALIDATE,100);
break;
}
}
};
public int getCurrentProgress() {
return currentProgress;
}
public void setCurrentProgress(int currentProgress) {
this.currentProgress = currentProgress;
}
public MyPathViewTwo(Context context) {
super(context);
}
public MyPathViewTwo(Context context, AttributeSet attrs) {
super(context, attrs);
path = new Path();//路径
//文字画笔
mPaintText = new Paint();
mPaintText.setAntiAlias(true);//消除锯齿
mPaintText.setColor(Color.BLACK);
mPaintText.setTextSize(50);
mPaintText.setTextAlign(Paint.Align.CENTER);
mPaint=new Paint();
mPaint.setColor(Color.RED);//下半部分
mPaint.setStyle(Paint.Style.FILL);
mPaint.setTextSize(50);
mPaint.setAntiAlias(true);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
mPaintPoint=new Paint();
mPaintPoint.setColor(Color.argb(0xFF,0xF8,0xA6,0xA6));//上半部分
mPaintPoint.setStrokeWidth(10);
mPaintPoint.setStyle(Paint.Style.FILL);
handler.sendEmptyMessage(NEED_INVALIDATE);
}
private Bitmap mBitmapBubble;
private Canvas mCanvasBit;
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
setMeasuredDimension(width, height);//设置画布的大小,长和宽
mBitmapBubble=Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
mCanvasBit=new Canvas(mBitmapBubble);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mCanvasBit.drawCircle(300,300,150,mPaintPoint);//圆
path.reset();//刷新
path.moveTo(500,450-currentProgress*3);
path.lineTo(500,500);
path.lineTo(count,500);
path.lineTo(count,450-currentProgress*3);
for(int i=0;i<10;i++){
path.rQuadTo(20,7,40,0);
path.rQuadTo(20,-7,40,0);
}
path.close();
mCanvasBit.drawPath(path, mPaint);
canvas.drawBitmap(mBitmapBubble, 0, 0, null);
canvas.drawText(currentProgress + "%", 300, 300, mPaintText);
}
}
MyPathViewTwoActivity
package com.example.administrator.mywidgetmode.PathView;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import com.example.administrator.mywidgetmode.Progress.MyRectangle;
import com.example.administrator.mywidgetmode.R;
/**
* Created by Administrator on 2015/9/18.
*/
public class MyPathViewTwoActivity extends AppCompatActivity {
private MyPathViewTwo myPathViewTwo;
private static final int PROGRESS=0x23;
private Button mBtStart;
private int progress;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case PROGRESS:
progress++;
if(progress<=100){
myPathViewTwo.setCurrentProgress(progress);
handler.sendEmptyMessageDelayed(PROGRESS,200);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pathview_two);
myPathViewTwo= (MyPathViewTwo) findViewById(R.id.myPathViewTwo);
mBtStart= (Button) findViewById(R.id.button_myPathViewTwo);
mBtStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessageDelayed(PROGRESS,1000);
}
});
}
}