package cn.a8.com;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.Toast;
public class PathMenuViewTwo extends FrameLayout implements OnTouchListener {
private static final String THIS_FILE = "PathMenuView";
/**
* 那个圆形菜单.
*/
private ImageView mHome;
/**
* 上下文.
*/
private Context mContext;
/**
* 图标列表
*/
private Bitmap[] icons = new Bitmap[12];
/**
* point列表
*/
private Point[] points;
/**
* 画笔: 字
*/
private Paint textPaint = new Paint();
/**
* 数目
*/
private static final int PONIT_NUM = 12;
/**
* 圆心坐标
*/
private int mPointX = 0, mPointY = 0;
/**
* 半径
*/
private int mRadius = 200;
/**
* 每两个点间隔的角度
*/
private int mDegreeDelta;
private float density;
/**
* 每次转动的角度差
*/
private int tempDegree = 0;
/**
* 选中的图标标识 999:未选中任何图标
*/
private int chooseBtn = 999;
/**
* 十二个状态,包含重复的状态
*/
private String[] twleveStatus = new String[12];
private int nonius = -1;
/**
* 当前的状态
*/
private String currentStatu;
private static final String CUSTOM = "自定义";
private boolean customFlag = false;
private boolean hasMeasured = false;
private OnTouchStatusListener onTurnplateListener;
public void setOnTurnplateListener(OnTouchStatusListener onTurnplateListener) {
this.onTurnplateListener = onTurnplateListener;
}
public PathMenuViewTwo(Context context) {
super(context);
setupViews();
}
public PathMenuViewTwo(Context context, AttributeSet attrs) {
super(context, attrs);
setupViews();
}
/**
* 方法名:setupViews 功能 : 设置view
*/
private void setupViews() {
mContext = getContext();
getDensity();
mHome = new ImageView(mContext);
mHome.setImageResource(R.drawable.a_show_status_picture);
addView(mHome);
final LayoutParams mHomeparams = (FrameLayout.LayoutParams) mHome
.getLayoutParams();
mHomeparams.width = LayoutParams.WRAP_CONTENT;
mHomeparams.height = LayoutParams.WRAP_CONTENT;
mHomeparams.topMargin = (int) (309 / density);
mHomeparams.topMargin = 309;
Log.e(THIS_FILE, "mHomeparams.topMargin value is"
+ mHomeparams.topMargin);
mHomeparams.leftMargin = (int) (237 / density);
mHomeparams.leftMargin = 237;
mHome.setLayoutParams(mHomeparams);
ViewTreeObserver vto = mHome.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
if (hasMeasured == false) {
int height = mHome.getDrawable().getMinimumHeight();
int width = mHome.getDrawable().getMinimumWidth();
mPointX = width /2 + mHomeparams.leftMargin;
mPointY =( height /2 + mHomeparams.topMargin );
hasMeasured = true;
String statu = "勿扰,旅游,标准,会议,休息,跑步,自定义";
settingAllStatus(statu, "标准");
initTextPaint();
loadIcons();
initPoints();
computeCoordinates();
}
return true;
}
});
// int mHomeWidth = mHome.getWidth();
// int mHomeHeight = mHome.getHeight();
// mPointX = mHomeWidth / 2 + mHomeparams.leftMargin;
// mPointY = mHomeHeight / 2 + mHomeparams.topMargin;
// mPointX = (int) (getDensity() * 360);
// mPointY = (int) (getDensity() * 426);
// Log.e(THIS_FILE, "mPointX value is "+ mPointX + ",mPointY value is" +
// mPointY);
// String statu = "勿扰,旅游,标准,会议,休息,跑步,自定义";
// settingAllStatus(statu, "标准");
//
// initTextPaint();
// loadIcons();
// initPoints();
// computeCoordinates();
}
private void getDensity() {
DisplayMetrics dm = new DisplayMetrics();
dm = mContext.getApplicationContext().getResources()
.getDisplayMetrics();
this.density = dm.density;
}
/**
*
* @param statu
* 状态字符串
* @param currentStatu
* 当前状态
*/
public void settingAllStatus(final String statu, final String currentStatu) {
this.currentStatu = currentStatu;
String[] status = statu.split(",");
int currentItem = 0;
for (int i = 0; i < status.length; i++) {
String tempStatus = status[i];
if (this.currentStatu.equals(tempStatus)) {
currentItem = i;
break;
}
}
int addItems = PONIT_NUM / 2;
for (int i = currentItem + addItems; i >= currentItem - addItems; i--) {
while (i < 0) {
i = status.length + i;
}
i %= status.length;
String statuss = status[i];
if (customFlag && CUSTOM.equals(statuss)) {
customFlag = false;
continue;
}
if (CUSTOM.equals(statuss)) {
customFlag = true;
}
++nonius;
twleveStatus[nonius] = statuss;
if (nonius == 11) {
break;
}
}
nonius = -1;
}
/**
*
* 方法名:loadBitmaps 功能:装载图片 参数:
*
* @param key
* @param d
*
*/
public void loadBitmaps(int key, BitmapDrawable d) {
Bitmap bitmap = Bitmap.createBitmap(d.getBitmap());
Log.e(THIS_FILE,
"key value is" + key + ",width value is" + bitmap.getWidth()
+ ",height value is" + bitmap.getHeight());
Bitmap rotateBitmap = rotate(bitmap, 0);
Canvas canvas = new Canvas(bitmap);
d.draw(canvas);
icons[key] = rotateBitmap;
Rect rect = new Rect(10 / 2, 10 / 2, 10 / 2 + rotateBitmap.getWidth(),
10 / 2 + rotateBitmap.getHeight());
String writestr = twleveStatus[key];
int iWordWidth = (int) textPaint.measureText(writestr);
float itemWidth = textPaint.measureText("会议");
drawText(canvas, writestr, (rect.left + rect.right) / 2 - (iWordWidth)
/ 2 + itemWidth / 2, (rect.top + rect.bottom) / 2, textPaint, -30);
// canvas.drawText(writestr, (rect.left + rect.right) / 2 - (iWordWidth)
// / 2 + itemWidth/4, (rect.top + rect.bottom) / 2 + 2, textPaint);
if (key == PONIT_NUM - 1) {
mRadius = 95 + 11 + bitmap.getHeight() / 2;
Log.e(THIS_FILE, "mRadius value is" + mRadius);
}
}
void drawText(Canvas canvas, String text, float x, float y, Paint paint,
float angle) {
if (angle != 0) {
canvas.rotate(angle, x, y);
}
canvas.drawText(text, x, y, paint);
if (angle != 0) {
canvas.rotate(-angle, x, y);
}
}
/**
*
* 方法名:loadIcons 功能:获取所有图片 参数
*/
public void loadIcons() {
Resources r = getResources();
for (int i = 0; i < PONIT_NUM - 1; i++) {
loadBitmaps(
i,
new BitmapDrawable(BitmapFactory.decodeResource(r,
R.drawable.a_status_picture).copy(
Bitmap.Config.ARGB_8888, true)));
}
loadBitmaps(
11,
new BitmapDrawable(BitmapFactory.decodeResource(r,
R.drawable.a_current_statu_picture).copy(
Bitmap.Config.ARGB_8888, true)));
}
/**
* 方法名:rotate 功能:将图片旋转指定的角度
*
* @param b
* @param degrees
* @return
*/
private Bitmap rotate(Bitmap b, int degrees) {
if (degrees != 0 && b != null) {
Matrix m = new Matrix();
m.setRotate(degrees, (float) b.getWidth() / 2,
(float) b.getHeight() / 2);
try {
Bitmap b2 = Bitmap.createBitmap(b, 0, 0, b.getWidth(),
b.getHeight(), m, true);
if (b != b2) {
b.recycle();
b = b2;
}
} catch (OutOfMemoryError ex) {
ex.printStackTrace();
}
}
return b;
}
/**
*
* 方法名:initTextPaint 功能:初始化画字笔
*/
private void initTextPaint() {
textPaint.se