2017-02-23 4 views
3

Ich habe ein übergroßes Bild, das ich nach oben, unten, links und rechts bewegen möchte, mit den Beschleunigungssensoren. Ich habe den folgenden Code erstellt, der funktioniert, aber das Bild bewegt sich in bestimmten Schritten und gleitet nicht reibungslos.Wie man ein ImageView entlang der X- und Y-Achse mit Sensor Accelerometer bewegt Daten

float[] matrix = new float[9]; 
mMatrix.getValues(matrix); 

if (accelerometerValues[0] < MOVE_RIGHT_LIMIT) { 

mMatrix.setTranslate(matrix[2] + 10, matrix[5]); 
mSchematicDiagram.setImageMatrix(mMatrix); 

Log.d("PROJECTA_SENSOR", "Moving Right"); 

Ist es richtig, die setTranslate auf Image Matrix für diese Art von Anwendungsfall zu verwenden, und wie würden Sie diesen reibungslosen Übergang schaffen?

Antwort

2

ich bin nicht sicher, welche Art von Bild, das Sie verschieben möchten, und warum Matrix verwenden, aber wenn Sie eine Image haben, können Sie es tun, indem X und Y-Werte in onSensorChanged Methode

@Override 
public void onSensorChanged(SensorEvent event) { 

    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 

     x -= (int) event.values[0]; 
     y += (int) event.values[1]; 

     yourImageView.setY(y); 
     yourImageView.setX(x); 

    } 
} 

Hier Einstellung ist mein MainActivity-Code, der gut funktioniert (ich muss nur Grenzen hinzufügen, weil das Bild sich derzeit aus den Bildschirmgrenzen bewegen kann), wahrscheinlich wird es jemandem helfen.

import android.app.Activity; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.widget.ImageView; 


public class MainActivity extends Activity implements SensorEventListener{ 

    private SensorManager sensorManager; 
    private Sensor accelerometer; 
    private long lastUpdate; 

    ImageView mDrawable; 
    public static int x = 0; 
    public static int y = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mDrawable = (ImageView) findViewById(R.id.image); 
     sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
     accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     lastUpdate = System.currentTimeMillis(); 

    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     sensorManager.registerListener(this, accelerometer, 
       SensorManager.SENSOR_DELAY_GAME); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     sensorManager.unregisterListener(this); 
    } 


    @Override 
    public void onSensorChanged(SensorEvent event) { 

     if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 

      x -= (int) event.values[0]; 
      y += (int) event.values[1]; 

      mDrawable.setY(y); 
      mDrawable.setX(x); 

     } 
    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 

    } 
} 
Verwandte Themen