自定义圆形加载控件,百分比加载,最近在学习一本书<群英传>,讲的真的很不错,但是需要一些基础才能适应这本书,可以快速的让自己从初级工程师步入到中级工程师,这就是一个自己学习后优化的控件,感觉还不错,借鉴下吧.
先上截图
package com.example.android_addview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class MyYuanView extends View{
private Context context;
private int length;//控件的长宽
private int mCircleXY;//控件的半径
private float mRadius;//控件的弧角
private RectF mArcRectF;//绘制弧线指定的外接矩形
private Paint mCirclePaint;//圆的画笔
private Paint mArcPaint;//绘制弧线的画笔
private Paint mTextPaint;//绘制文字的画笔
private String mShowText;//文字内容
private int mShowTextSize;//文字长度
private float mSweepAngle = 0;//圆弧的度数
protected topbarClickListener mListener;
public MyYuanView(Context context) {
super(context);
this.context = context;
}
public MyYuanView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyYuanView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
//设置三种图形的参数
length = getMeasuredWidth();
mCircleXY = length/2;
mRadius = (float)(length*0.5/2);
//绘制弧线,需要指定其椭圆的外接矩形
mArcRectF = new RectF((float)(length*0.1), (float)(length*0.1), (float)(length*0.9), (float)(length*0.9));
}
@Override
protected void onDraw(Canvas canvas) {
// mSweepAngle = (float) (Math.random()*360);
//绘制弧线
mArcPaint = new Paint();
mArcPaint.setColor(0xffd2d2d2);
canvas.drawArc(mArcRectF,270, mSweepAngle, true, mArcPaint);//SweepAngle比例//4个参数的含义
//外接矩形
//绘制点的起始位置270是正上方
//绘制的角度
//是否连接圆心
//画笔工具
//绘制圆形
mCirclePaint = new Paint();
mCirclePaint.setColor(0xff9c9c9c);
canvas.drawCircle(mCircleXY, mCircleXY, mRadius, mCirclePaint);
//绘制文字
mTextPaint = new Paint();
mTextPaint.setColor(0xff000000);
mTextPaint.setTextAlign(Paint.Align.CENTER);
mTextPaint.setTextSize(30);
mShowText = (int)(mSweepAngle/360*100)+"%";
mShowTextSize = 50;
canvas.drawText(mShowText, 0, mShowText.length(),mCircleXY,mCircleXY+(mShowTextSize/4), mTextPaint);
super.onDraw(canvas);
// invalidate();
if(mSweepAngle>360){
mListener.Toasttt();
}else{
postInvalidateDelayed(5);
}
mSweepAngle +=1 ;
}
public interface topbarClickListener{
//左按钮点击事件
void Toasttt();
}
public void setOnTopBarClickListener(topbarClickListener mListener){
this.mListener = mListener;
}
}
//加载成功后回调
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyYuanView myyuanview = (MyYuanView) findViewById(R.id.myyuanview);
myyuanview.setOnTopBarClickListener(new topbarClickListener() {
@Override
public void Toasttt() {
Toast.makeText(MainActivity.this, "结束了", 0).show();
}
});
}
}
//布局引用
<LinearLayout 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:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.example.android_addview.MyYuanView
android:id="@+id/myyuanview"
android:layout_width="300dp"
android:layout_height="300dp" >
</com.example.android_addview.MyYuanView>
</LinearLayout>
</LinearLayout>
我是安卓一年新人,请大家支持.