Я снова отредактировал всю тему, основываясь на том, что у меня есть, поскольку у меня было так много просмотров по предыдущей теме и нет ответов. А пока я разобрался, как работает акселерометр.
Теперь у меня есть круг (холст), который я хотел бы назвать «Зога», если не возражаете. Этот круг должен двигаться в зависимости от угла наклона телефона. Таким образом, в основном, если телефон перемещается на левую сторону, цикл перемещается на левую сторону, если телефон перемещается вниз на правую сторону, цикл перемещается в этом направлении.
Цикл создается через класс Zoga.java, и вся магия происходит в GravitacijaActivity.java.
Вот 2 вопроса, которые у меня есть:
1.) Киркл двигается только в левом направлении.
2.) Циркул выходит за пределы экрана (слева от курса) .
Есть идеи, как решить эту проблему?
ПРИМЕЧАНИЕ: Я приложил весь свой код, даже макет main.xml, на тот случай, если кому-то еще понадобится этот код для целей образования и обучения:)
GravitaijaActivity.java
package gravity.pack;
import android.app.Activity;
import android.os.Bundle;
import android.widget.FrameLayout;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
public class GravitacijaActivity extends Activity implements SensorEventListener{
public float xPos = 50.0f, yPos = 50.0f;
public float xAcc = 0.0f, yAcc = 0.0f;
public int radius = 30;
private SensorManager sensorManager;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_GAME);
FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
main.addView(new Zoga(this, xPos, yPos, radius));
}
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
public void onSensorChanged(SensorEvent sensorArg) {
if (sensorArg.sensor.getType() == Sensor.TYPE_ORIENTATION)
{
xAcc = sensorArg.values[1];
yAcc = sensorArg.values[2];
updateZoga();
}
}
public void updateZoga()
{
xPos += xAcc;
yPos += yAcc;
FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
main.removeAllViews();
main.addView(new Zoga(this, xPos, yPos, radius));
try {
Thread.sleep(1);
} catch (InterruptedException e) {}
}
}
Zoga.java
package gravity.pack;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
public class Zoga extends View{
private final float x;
private final float y;
private final float r;
private final Paint mPaint = new Paint (Paint.ANTI_ALIAS_FLAG);
public Zoga(Context context, float x, float y, float r) {
super(context);
mPaint.setColor(0xFFFF0000);
this.x = x;
this.y = y;
this.r = r;
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawCircle(x, y, r, mPaint);
}
}
Макет main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/main_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FF66FF33" />