package com.DeviceTest.view;
|
|
import com.DeviceTest.R;
|
import com.DeviceTest.R.drawable;
|
|
import android.content.Context;
|
import android.graphics.Canvas;
|
import android.graphics.Color;
|
import android.graphics.Paint;
|
import android.graphics.drawable.Drawable;
|
import android.util.AttributeSet;
|
import android.view.View;
|
|
public class CompassView extends View {
|
|
private float yaw = 0;
|
private Paint paint;
|
private Drawable compass;
|
|
public CompassView(Context context) {
|
this(context, null);
|
}
|
|
public CompassView(Context context, AttributeSet attrs) {
|
this(context, attrs, 0);
|
}
|
|
public CompassView(Context context, AttributeSet attrs, int defStyle) {
|
super(context, attrs, defStyle);
|
paint = new Paint();
|
paint.setColor(Color.RED);
|
// paint.setStyle(Style.FILL_AND_STROKE);
|
paint.setStrokeWidth(2);
|
|
compass = getResources().getDrawable(R.drawable.compass);
|
|
this.setBackgroundColor(Color.WHITE);
|
}
|
|
public void update(float yaw) {
|
if (Math.abs(this.yaw - yaw) > 1) {
|
this.yaw = yaw;
|
postInvalidate();
|
}
|
}
|
|
protected void onDraw(Canvas canvas) {
|
int height = getHeight();
|
int width = getWidth();
|
int midX = width / 2;
|
int midY = height / 2;
|
int size = (height > width ? width : height) * 3 / 8;
|
compass.setBounds(midX - size, midY - size, midX + size, midY + size);
|
canvas.save();
|
canvas.rotate(-yaw, midX, midY);
|
compass.draw(canvas);
|
canvas.restore();
|
paint.setTextSize(size / 3);
|
canvas.drawText((int) yaw + "\260", 0, size / 3, paint);
|
}
|
}
|