Déplacement d'une image à l'aide de l'Accéléromètre de android

J'ai lu des articles/didacticiel sur l'accès à l'accéléromètre du téléphone (accélération et de l'orientation) des valeurs. Je suis en train de construire une application simple où je peux déplacer une balle de l'image à l'aide de ces valeurs. Voici mon code:

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class Accelerometer extends Activity implements SensorEventListener {
/** Called when the activity is first created. */
CustomDrawableView mCustomDrawableView = null; 
ShapeDrawable mDrawable = new ShapeDrawable(); 
int x ; 
int y ;
private SensorManager sensorManager = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Get a reference to a SensorManager
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mCustomDrawableView = new CustomDrawableView(this); 
setContentView(mCustomDrawableView); 
// setContentView(R.layout.main);
}
//This method will update the UI on new sensor events
public void onSensorChanged(SensorEvent sensorEvent) {
{
if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
int someNumber = 100;
float xChange = someNumber * sensorEvent.values[1];
//values[2] can be -90 to 90
float yChange = someNumber * 2 * sensorEvent.values[2];       
x = x + (int)xChange;
y = y + (int)yChange;
}
if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) {
}
}
}
//I've chosen to not implement this method
public void onAccuracyChanged(Sensor arg0, int arg1) {
//TODO Auto-generated method stub
}
@Override
protected void onResume() {
super.onResume();
//Register this class as a listener for the accelerometer sensor
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
//...and the orientation sensor
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onStop() {
//Unregister the listener
sensorManager.unregisterListener(this);
super.onStop();
} 
public  class CustomDrawableView extends View { 
public CustomDrawableView(Context context) { 
super(context); 
int width = 50; 
int height = 50; 
mDrawable = new ShapeDrawable(new OvalShape()); 
mDrawable.getPaint().setColor(0xff74AC23); 
mDrawable.setBounds(x, y, x + width, y + height); 
} 
protected void onDraw(Canvas canvas) { 
mDrawable.draw(canvas); 
invalidate(); 
} 
}
}

Je reçois une forme ovale affiché sur l'écran mais rien ne se passe après.

grâce

  • Dans votre onDraw vous ne faites rien pour déplacer votre forme. Vous devez ajouter le code qui définit l'emplacement de votre drawable (à partir des valeurs X,Y, vous êtes le stockage)
  • comment puis-je le faire.. pouvez-vous me donner un exemple de code
  • Essayer de mettre cela dans votre méthode onDraw "RectF ovale = new RectF(Accéléromètre.x, Accéléromètre.y, Accéléromètre.x + largeur, l'Accéléromètre.y + hauteur); //définir les limites du rectangle de Peinture p = new Paint(); //définir certaines options de peinture de la toile.drawOval(ovale, p);" Vous aurez besoin pour rendre votre X et Y des variables des membres du public et votre largeur / hauteur doivent être des valeurs statiques dans votre CustomDrawableView classe.