나는이 비디오 here에 기반한 안드로이드의 나침반을 프로그램하려고했지만, 비디오보기가 이제는 더 이상 사용되지 않고 숫자로만 값을 가져와야한다는 사실이 있습니다 (예 : 135 ° NE 또는 234 °). SW. 그래서 어떤 사람들이 손을 내줄 수 있다면 정말 대단 할 것입니다. 조언 해 주셔서 감사합니다.나침반을 프로그래밍하는 방법은 무엇입니까?
0
A
답변
0
사용자 정의 나침반 View 클래스 : 주요 활동 클래스
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class MyCompassView extends View {
private Paint paint;
private float position = 0;
public MyCompassView(Context context) {
super(context);
init();
}
private void init() {
paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(2);
paint.setTextSize(25);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.WHITE);
}
@Override
protected void onDraw(Canvas canvas) {
int xPoint = getMeasuredWidth()/2;
int yPoint = getMeasuredHeight()/2;
float radius = (float) (Math.max(xPoint, yPoint) * 0.6);
canvas.drawCircle(xPoint, yPoint, radius, paint);
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint);
// 3.143 is a good approximation for the circle
canvas.drawLine(xPoint,
yPoint,
(float) (xPoint + radius
* Math.sin((double) (-position)/180 * 3.143)),
(float) (yPoint - radius
* Math.cos((double) (-position)/180 * 3.143)), paint);
canvas.drawText(String.valueOf(position), xPoint, yPoint, paint);
}
public void updateData(float position) {
this.position = position;
invalidate();
}
}
:
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class MainActivity extends Activity {
private static SensorManager sensorService;
private MyCompassView compassView;
private Sensor sensor;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
compassView = new MyCompassView(this);
setContentView(compassView);
sensorService = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorService.getDefaultSensor(Sensor.TYPE_ORIENTATION);
if (sensor != null) {
sensorService.registerListener(mySensorEventListener, sensor,
SensorManager.SENSOR_DELAY_NORMAL);
Log.i("Compass MainActivity", "Registerered for ORIENTATION Sensor");
} else {
Log.e("Compass MainActivity", "Registerered for ORIENTATION Sensor");
Toast.makeText(this, "ORIENTATION Sensor not found",
Toast.LENGTH_LONG).show();
finish();
}
}
private SensorEventListener mySensorEventListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
// angle between the magnetic north directio
// 0=North, 90=East, 180=South, 270=West
float azimuth = event.values[0];
compassView.updateData(azimuth);
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (sensor != null) {
sensorService.unregisterListener(mySensorEventListener);
}
}
}
0
당신은 할 수 있습니다 이미하지 않은 경우, 내가 가서 당신을 조언 것이라고하지만, 읽기 사용 가능한 센서 및 특정 사례에 대한 Android Documentation - 나침반 응용 프로그램을 설계하는 데 도움이 될 수 있습니다. 웹 페이지에서 "나침반"을 검색하면 더 모호한 관련 정보로 이동합니다. 행운을 빕니다!
+0
안녕하세요 @ go2 yeaaaa 사실 인터넷에서 일부 나침반 정보를 찾으려고 애쓰는 것은 정말로 어렵습니다. 검색 결과는 Android 앱을 소개하는 방법 또는 사용 방법이 아닌 사용 방법을 보여줍니다. – Elsanty
빠른 답장을 보내 주셔서 감사합니다. Sensor.TYPE_ORIENTATION은 (는) 사용되지 않습니다 ... 새 Android 버전에서는 문제가되지 않거나 충돌이 발생합니까? – Elsanty
문제가되지 않기를 바랍니다. 어쨌든, 그것이 어떻게되는지 당신 편에 확인하십시오. – fida1989
예제를 사용하여 값을 표시하지만 부정적인 방법으로 값을 표시합니다 (예 : -24.4785 ...). 맞습니까? – Elsanty