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
- Android 圆球组成数字控件
- Android属性动画与自定义控件画圆球移动
- 关于Android手势缩放圆球
- Android自定义一个圆球View
- android自定义view小圆球指哪跑哪
- Android 标签数字自定义控件
- Android如何判断当前字符串的组成情况(如:全由数字组成)
- 数组组成最小数字
- Android实现图标右上角红色小圆球提示气泡
- android 桌面控件-数字时钟的实现
- Android 数字EditText控件不能为空
- android自定义控件-----自定义数字价格键盘
- Android入门——数字组成的字符串转化为货币格式
- Android入门——数字组成的字符串转化为货币格式
- 圆球渲染
- 安卓属性动画与自定义控件实现圆球移动并实现颜色渐变
- Android应用程序组成
- android 之 应用程序组成
- 字符串反转
- 仿制任务栏托盘//.net//WCF架构
- tar命令的详细解释
- 归并排序
- 简单试用Android Annotations
- Android 圆球组成数字控件
- CentOS7搭建LAMP服务器相关步骤(精)
- 读取文件夹下的文件列表
- 深度优先搜索(DFS)
- getPath getAbsolutePath和getCanonicalPath的区别
- ios block一定会犯的几个错误
- 【Linux】CentOS系统研究
- opencv图像的读入、灰度化、二值化、反色
- unity3d中隐藏/显示物体方法总结