nckb Posté(e) 27 février 2011 Share Posté(e) 27 février 2011 Bonjour, je débute dans le développement d'application sous Android. J'ai lu quelques sujets et fait quelques tutos, mais je crois que bien que google soit présent un petit coup de main personnalisé m'aiderait bien plus pour avancer !!! Voilà mon problème, j'aimerais que selon l'inclinaison du téléphone un texte (contenant les valeurs de l'accéléromètre) soit déplacé jusqu'au bord de l'écran. (Un peu comme une boule dans un plateau). Je pensais avoir toutes les clés en main, mais je me confronte au problème de rafraichissement du texte. Je vous donne mon code source : import android.app.Activity; import android.os.Bundle; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.Log; import android.view.View; import android.widget.TextView; public class TestAccel extends Activity { private SensorManager sensorManager; private Sensor sensor; private float x, y, z; private SimulationView sm; String st = new String("Coucou !"); private static final String TAG = "TestAccel"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); sensor = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0); new TextView(this); sm = new SimulationView(this); setContentView(sm); } @Override protected void onResume() { super.onResume(); } @Override protected void onStop() { super.onStop(); } class SimulationView extends View{ Paint pt = new Paint(); public SimulationView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { pt.setColor(Color.BLUE); pt.setTextSize(12); canvas.drawText(st, 0, st.length(), 10, 10, pt); Log.v(TAG,"draw"); } protected void onResume() { sensorManager.registerListener(accelerationListener, sensor, SensorManager.SENSOR_DELAY_GAME); Log.v(TAG,"resume"); } protected void onStop() { sensorManager.unregisterListener(accelerationListener); Log.v(TAG,"stop"); } private SensorEventListener accelerationListener = new SensorEventListener() { @Override public void onAccuracyChanged(Sensor sensor, int acc) { } @Override public void onSensorChanged(SensorEvent event) { x = event.values[0]; y = event.values[1]; z = event.values[2]; refreshDisplay(); sm.requestLayout(); Log.v(TAG,"onsensorchanged"); } private void refreshDisplay() { st = String.format("x is: %f / y is: %f / z is: %f", x, y, z); // Les coordonnées sont bien dans la chaine de caractères. //result.setText(output); } }; } Dans un premier temps, sans déplacer le texte, il faudrait que je puisse y afficher les coordonnées. J'ajoute que si je ne crée par de classe SimulationView et que j'ajoute simplement un TextView dans la méthode onCreate avec le setContentView(Textview), les valeurs du capteurs s'affichent bien en temps réel. Ensuite, sur l'événement onSensorChanged il faudrait déplacer ce texte... Pour info, je début aussi un peu en java, si j'ai fait des erreurs ou si je n'ai pas suivi la méthode de développement java, veuillez m'excuser XD Je vous remercie de m'indiquer les voies à suivre pour arriver à mes fins !! Nckb Lien vers le commentaire Partager sur d’autres sites More sharing options...
nckb Posté(e) 27 février 2011 Auteur Share Posté(e) 27 février 2011 Bon en relisant le code par rapport à celui qui fonctionne mais qui n'utilise pas la classe SimulationView, je me suis aperçu que j'avais oublié d'appeler les méthodes suivantes : @Override protected void onResume() { super.onResume(); sm.onResume(); } @Override protected void onStop() { sm.onStop(); super.onStop(); } Ce n'est pas fluide du tout, mais au moins j'ai récupéré les coordonnées du capteur =) Et pourtant je l'avais relu plusieurs fois ce code... alala Merci en tout cas ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
nckb Posté(e) 27 février 2011 Auteur Share Posté(e) 27 février 2011 et juste pour rendre l'affichage des coordonnées fluides et non pas uniquement sur changement de view (par rotation), il suffit d'appeler la méthode sm.invalidate(); dans la méthode public void onSensorChanged(SensorEvent event) { Voilà, bonne continuation à tous, et peut etre a bientot ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.