Android 圆球组成数字控件

来源:互联网 发布:淘宝上鞋子哪个店好 编辑:程序博客网 时间:2024/04/26 18:09





package com.jim.viewgroup.view;



import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;


/**
 * 用球球组成数字控件
 * @author Jim
 *
 */


public class NumberView extends View{

private static final String TAG = "NumberView";
private Paint mPaint;
//一个5*3数组,用来模拟数字组成位置
private int mNumberContent[] = new int[5];
//表示当前显示的数字
private int mCurNumber;
//小球半径
private float mRadius;



public NumberView(Context context) {
super(context);
Log.w(TAG, "NumberView(Context context)");
mCurNumber = 0;
initPaint();
setNumberContent();
}
public NumberView(Context context, AttributeSet attrs){
super(context, attrs);
// Log.w(TAG, "NumberView(Context context, AttributeSet attrs)");
// Log.w(TAG, "" + attrs.getAttributeCount());
// Log.w(TAG, "" + attrs.getAttributeValue("http://schemas.android.com/apk/res/android","layout_width"));
// Log.w(TAG, "" + attrs.getAttributeIntValue(1, 0));
mCurNumber = 0;
initPaint();
setNumberContent();
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
getRadius();
Log.w(TAG, "mCurNumber : " + mCurNumber);
//使用二进制与运算判断绘制
for(int i = 0; i<5; i++){
for(int j = 1, z = 1; j<=4; j=j*2,z++){
//Log.w(TAG, "mNumber : " + mNumberContent[i]);
//Log.w(TAG, "j : " + j);
if((mNumberContent[i] & j) != 0){

Log.w(TAG,"i : " + i + ", j : " + j + ", & : " + (mNumberContent[i] & j));
canvas.drawCircle(8.5f*mRadius-2.5f*z*mRadius, 
2.5f*(i+1)*mRadius-1.5f*mRadius,
mRadius,
mPaint);
}
}
}
}




private void initPaint(){

mPaint = new Paint();
mPaint.setColor(Color.BLACK);
}

/**
* 设置当前显示的数字,默认为0
* @param number
*/
public void setNumber(int number){
//只接受1-9范围
if(number<-1 || number > 9){
mCurNumber = 0;

}else{
mCurNumber = number;
}

setNumberContent();

}
/**
* 返回当前数字
* @return
*/
public int getNumber(){
return mCurNumber;
}

public void setNumberColor(int color){
mPaint.setColor(color);
invalidate();
}
 
/**
* 根据当前数字修改数组
*/
private void setNumberContent(){
//初始化数组
initNumberContent();
switch (mCurNumber) {
case 0:

mNumberContent[0] = 7; mNumberContent[1] = 5;
mNumberContent[2] = 5; mNumberContent[3] = 5;
mNumberContent[4] = 7;

break;
case 1:
mNumberContent[0] = 2; mNumberContent[1] = 6;
mNumberContent[2] = 2; mNumberContent[3] = 2;
mNumberContent[4] = 7;

break;
case 2:
mNumberContent[0] = 7; mNumberContent[1] = 1;
mNumberContent[2] = 7; mNumberContent[3] = 4;
mNumberContent[4] = 7;
break;
case 3:
mNumberContent[0] = 7; mNumberContent[1] = 1;
mNumberContent[2] = 7; mNumberContent[3] = 1;
mNumberContent[4] = 7;
break;
case 4:
mNumberContent[0] = 6; mNumberContent[1] = 6;
mNumberContent[2] = 7; mNumberContent[3] = 2;
mNumberContent[4] = 2;

break;
case 5:
mNumberContent[0] = 7; mNumberContent[1] = 4;
mNumberContent[2] = 7; mNumberContent[3] = 1;
mNumberContent[4] = 7;
break;
case 6:
mNumberContent[0] = 7; mNumberContent[1] = 4;
mNumberContent[2] = 7; mNumberContent[3] = 5;
mNumberContent[4] = 7;
break;
case 7:
mNumberContent[0] = 7; mNumberContent[1] = 1;
mNumberContent[2] = 1; mNumberContent[3] = 1;
mNumberContent[4] = 1;
break;
case 8:
mNumberContent[0] = 7; mNumberContent[1] = 5;
mNumberContent[2] = 7; mNumberContent[3] = 5;
mNumberContent[4] = 7;
break;
case 9:
mNumberContent[0] = 7; mNumberContent[1] = 5;
mNumberContent[2] = 7; mNumberContent[3] = 1;
mNumberContent[4] = 1;
break;
default:
break;
}
}

/**
* 初始化数组
*/
private void initNumberContent(){

for(int i = 0; i<5; i++){

mNumberContent[i] = 0;

}
}

/**
* 根据宽高计算合适半径
*/
private void getRadius(){
//宽>高
if(getWidth() >= getHeight()){
Log.w(TAG, "w>h : " );
mRadius = (float)getHeight()/12.0f;
}else{
//高>宽

Log.w(TAG, "h>w");
float testWidth = 7.0f * (getHeight()/12.0f);
if(((float)getWidth() - testWidth) > 0){
//若高比宽多很多,用宽做基准
mRadius = (float)getWidth()/7.0f;
}else{
//若高只是比宽多一点,用高做基准
mRadius = (float)getHeight()/12.0f;
}
//mRadius = getWidth()/7.0f;
}

Log.w(TAG, "mRadius : " + mRadius);
}





}
0 0
原创粉丝点击