您的位置:首页 > 移动开发 > Android开发

Android 简单的圆形刻度刻画

2016-03-30 14:26 405 查看
一直xi最近没事做了个 自定义view 绘图绘制圆形的刻度进度条 具体 源码如下

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;

/**
* Created by Administrator on 2016/3/30.
*/
public class SampleView2 extends View {

private int mWidth;//控件宽度

private int mHeight;//控件高度

private int mBigRadius = 100;//大半径

private int mScale = 20;//刻度长度

private int mSmallRadius;//里面小圆的半径

private Paint mPaint;//画笔

private int index = 50;//刻度数

private double angle = 360d;//角度

private double smalAngle;//每个小的刻度角度

private int indexSmal = 0;//标记刻度

private boolean boolStart = true;

public SampleView2(Context context) {
this(context, null);
}

public SampleView2(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public SampleView2(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

private void init() {

mSmallRadius = mBigRadius - mScale;

mPaint = new Paint();

mPaint.setStrokeWidth(3);

mPaint.setColor(Color.RED);

mPaint.setAntiAlias(true);

smalAngle = angle / index;

indexSmal = index;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);

int widhSize = getResolveSize(200, widthMeasureSpec);
int heightSize = getResolveSize(200, heightMeasureSpec);

if (widhSize > heightSize) {
heightSize = widhSize;
}

mWidth = widhSize;
mHeight = heightSize;
setMeasuredDimension(widhSize, heightSize);

}

@Override
protected void onDraw(Canvas canvas) {

int centerWidth = mWidth / 2;
int centerheight = mHeight / 2;

for (int i = 0; i < index; i++) {
float cosAngle = (float) Math.cos(Math.toRadians(smalAngle * i));
float sinAngle = (float) Math.sin(Math.toRadians(smalAngle * i));

if (indexSmal == i) {
mPaint.setColor(Color.BLACK);
} else {
mPaint.setColor(Color.RED);
}

canvas.drawLine(centerWidth + mSmallRadius * cosAngle, centerheight - mSmallRadius * sinAngle,
centerWidth + mBigRadius * cosAngle, centerheight - mBigRadius * sinAngle, mPaint);

}

}

private int getResolveSize(int size, int measureSec) {
int result = size;

int meSize = MeasureSpec.getSize(measureSec);
int meMode = MeasureSpec.getMode(measureSec);
switch (meMode) {
case MeasureSpec.AT_MOST:
result = Math.min(size, meSize);
break;
case MeasureSpec.EXACTLY:
result = meSize;
break;
case MeasureSpec.UNSPECIFIED:
result = size;
break;
}

return result;
}

public void startThread() {
boolStart = true;

new Thread(new Runnable() {
@Override
public void run() {
while (boolStart) {
try {
Thread.sleep(50);

if(indexSmal == 0){
indexSmal = index;
}

indexSmal --;
handler.sendEmptyMessage(1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
}

private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
invalidate();
}
};

public void endThread(){
boolStart = false;
}
}


参考文献是 http://www.2cto.com/kf/201505/397558.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 控件 源码