package org.wheelmap.android.view;
import org.wheelmap.android.online.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class CompassView extends View {
private float direction = 0;
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private boolean firstDraw;
private int mColor;
private final static int DEFAULT_COLOR_RES = R.color.dark_grey_one;
private static String TAG = CompassView.TAG;
public void setName(String name) {
this.name = name;
}
private String name;
public CompassView(Context context) {
super(context);
init();
}
public CompassView(Context context, AttributeSet attrs) {
super(context, attrs);
initAttributes(attrs);
init();
}
public CompassView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initAttributes(attrs);
init();
}
private void initAttributes(AttributeSet attrs) {
TypedArray a = getContext().obtainStyledAttributes(attrs,
R.styleable.CompassView);
try {
mColor = a.getColor(R.styleable.CompassView_compassview_color, getContext()
.getResources().getColor(DEFAULT_COLOR_RES));
} finally {
a.recycle();
}
}
private void init() {
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
paint.setColor(mColor);
firstDraw = true;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),
MeasureSpec.getSize(heightMeasureSpec));
}
@Override
protected void onDraw(Canvas canvas) {
int cxCompass = getMeasuredWidth() / 2;
int cyCompass = getMeasuredHeight() / 2;
float radiusCompass;
if (cxCompass > cyCompass) {
radiusCompass = (float) (cyCompass * 0.9);
} else {
radiusCompass = (float) (cxCompass * 0.9);
}
canvas.drawCircle(cxCompass, cyCompass, radiusCompass, paint);
if (!firstDraw) {
//Log.d("CompassView","id: " + name + " ---- d: " + direction);
canvas.drawLine(
cxCompass,
cyCompass,
(float) (cxCompass + radiusCompass
* Math.cos(Math.toRadians(direction))),
(float) (cyCompass - radiusCompass
* Math.sin(Math.toRadians(direction))), paint);
}
}
public void updateDirection(float dir) {
firstDraw = false;
direction = dir;
invalidate();
//Log.d("CompassView", "-------------------- new -----------------");
}
}