如何使用传感器加速度计数据沿X和Y轴移动图像视图



我有一个超大的图像,我想使用加速度计值向上,向下,左右移动。我创建了以下有效的代码,但是图像以不同的步骤移动,并且不会顺利滑动。

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");

在imageView矩阵上使用setTranslate作为这种用例是否正确?如何创建这种平稳的过渡?

我不确定要移动哪种映像以及为什么使用矩阵,但是如果您有imageView,可以通过在OnSenSorchanged方法中设置X和Y值来完成此操作

 @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);
    }
}

这是我的主动脉代码,它运行良好(我只需要添加边框,因为当前图像可以移出屏幕边界),也许它会帮助某人。

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) {
    }
}

最新更新