package com.capricorn;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
/**
* 自定义十字架
* @author cjj
*
*/
public class CrossView extends View{
private Paint mPaint;
private int mRotation;
private static final int DEFAULT_SIZE = 100;//默认的试图尺寸
float[] mPoints = {0.5f,0f,0.5f,1f,0f,0.5f,1f,0.5f};
public CrossView(Context context) {
super(context);
init();
}
public CrossView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(14);
mPaint.setColor(0xffff8c00);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//需要使用计算好的宽和高的值作为该方法的实参
setMeasuredDimension( calculateMeasure(widthMeasureSpec), calculateMeasure(heightMeasureSpec) );
}
//实现计算测量值的代码
private int calculateMeasure(int measureSpec){
int result = ( int ) ( DEFAULT_SIZE*getResources().getDisplayMetrics().density );
int specMode = MeasureSpec.getMode( measureSpec );//在MeasureSpec中检索模式
int specSize = MeasureSpec.getSize( measureSpec );//在MeasureSpec中检索尺寸
//基于模式选择尺寸
if(specMode == MeasureSpec.EXACTLY){
result = specSize;
}else if(specMode == MeasureSpec.AT_MOST){
result = Math.min( result, specSize );
}
return result;
}
@Override
protected void onDraw( Canvas canvas ) {
// TODO Auto-generated method stub
super.onDraw( canvas );
canvas.save();//所有的在画布上绘图的调用都应当受对应的sava()和restore()的约束
int scale = getWidth();
canvas.scale( scale, scale );
canvas.rotate( mRotation );
canvas.drawLines( mPoints, mPaint );//绘制十字的两条线
canvas.restore();//所有的在画布上绘图的调用都应当受对应的sava()和restore()的约束
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
mRotation = 45;
postInvalidate();
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
mRotation = 0;
postInvalidate();
return super.onKeyUp(keyCode, event);
}
}