Я снова отредактировал всю тему, основываясь на том, что у меня есть до сих пор, так как у меня было так много просмотров предыдущей темы и ни одного ответа. Тем временем я вроде как понял, как работает акселерометр.
Теперь у меня есть круг (холст), который я хочу назвать "Зога", если не возражаете. Этот круг должен двигаться в зависимости от угла наклона телефона. Таким образом, если телефон перемещается влево, круг перемещается по левой стороне, если телефон перемещается вниз-вправо, круг движется в этом направлении.
Цикл создается с помощью класса 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) {}
}
}
Зога.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" />