package com.amiral.kupluk;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class KiblatView extends View {
private float busur;
private int lebar = 240;
private int tinggi = 240;
private Paint penandaGambar;
private Paint paintText;
private Paint gambarLingkaran;
private String northString;
private int textHeight;
/** Konstruktor */
public KiblatView(Context context) {
super(context);
initKiblatView();
}
public KiblatView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
initKiblatView();
}
public KiblatView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initKiblatView();
}
protected void initKiblatView() {
setFocusable(true);
gambarLingkaran = new Paint(Paint.ANTI_ALIAS_FLAG);
gambarLingkaran.setColor(R.color.background_color);
gambarLingkaran.setStrokeWidth(1);
gambarLingkaran.setStyle(Paint.Style.FILL_AND_STROKE);
Resources r = this.getResources();
northString = r.getString(R.string.cardinal_north);
paintText = new Paint(Paint.ANTI_ALIAS_FLAG);
paintText.setColor(r.getColor(R.color.text_color));
textHeight = (int) paintText.measureText("yY");
penandaGambar = new Paint(Paint.ANTI_ALIAS_FLAG);
penandaGambar.setColor(r.getColor(R.color.marker_color));
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// The compass is a circle that fills as much space as possible.
// Set the measured dimensions by figuring out the shortest boundary,
// height or width.
// int measuredWidth = measure(widthMeasureSpec);
// int measuredHeight = measure(heightMeasureSpec);
// int d = Math.min(measuredWidth, measuredHeight);
setMeasuredDimension(lebar, tinggi);
}
/*
* private int measure(int measureSpec) { int result = 0;
*
* // Decode the measurement specifications. int specMode =
* MeasureSpec.getMode(measureSpec); int specSize =
* MeasureSpec.getSize(measureSpec);
*
* if (specMode == MeasureSpec.UNSPECIFIED) { // Return a default size of
* 200 if no bounds are specified. result = 200; } else { // As you want to
* fill the available space // always return the full available bounds.
* result = specSize; } return result; }
*/
/** untuk mengatur arah */
public void setBearing(float _bearing) {
busur = _bearing;
}
/** mengambil arah */
public float getBusur() {
return busur;
}
@Override
protected void onDraw(Canvas canvas) {
int px = getMeasuredWidth() / 2;
int py = getMeasuredHeight() / 2;
int radius = Math.min(px, py);
// Draw the background
canvas.drawCircle(px, py, radius, gambarLingkaran);
// Rotate our perspective so that the 'top' is
// facing the current bearing.
canvas.save();
canvas.rotate(-busur, px, py);
int textWidth = (int) paintText.measureText("W");
int cardinalX = px - textWidth / 2;
int cardinalY = py - radius + textHeight;
// canvas.drawLine(px, py, cardinalX, cardinalY, markerPaint);
// canvas.save();
// canvas.rotate(-(bearing+295), px, py);
// Draw the marker every 15 degrees and a text every 45.
for (int i = 0; i < 24; i++) {
// Draw a marker.
// canvas.drawLine(px, py-radius, px, py-radius+10, markerPaint);
canvas.save();
canvas.translate(0, textHeight);
// Draw the cardinal points
/*
* if (i % getKiblat() == 0) { String dirString = "KB"; int arrowY =
* 2*textHeight;
*
* canvas.drawLine(px, arrowY, px-5, 3*textHeight, markerPaint);
* canvas.drawLine(px, arrowY, px+5, 3*textHeight, markerPaint);
* canvas.drawText(dirString, cardinalX, cardinalY, textPaint); }
*/
if (i / 6 == 0) {
String dirString = "";
switch (i) {
case (0): {
dirString = northString;
int arrowY = 2 * textHeight;
canvas.drawLine(px, arrowY, px - 5, 3 * textHeight,
penandaGambar);
canvas.drawLine(px, arrowY, px + 5, 3 * textHeight,
penandaGambar);
canvas.drawLine(px, py, px, arrowY, penandaGambar);
break;
}
// case(6) : dirString = eastString; break;
// case(12) : dirString = southString; break;
// case(18) : dirString = westString; break;
}
// canvas.drawText(dirString, cardinalX, cardinalY, paintText);
} else if (i % 3 == 0) {
// Draw the text every alternate 45deg
// String angle = String.valueOf(i*15);
// float angleTextWidth = textPaint.measureText(angle);
//
// int angleTextX = (int)(px-angleTextWidth/2);
// int angleTextY = py-radius+textHeight;
// canvas.drawText(angle, angleTextX, angleTextY, textPaint);
}
canvas.restore();
canvas.rotate(15, px, py);
}
canvas.restore();
}
}
|