Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用传感器加速计数据沿X轴和Y轴移动图像视图_Android_Android Imageview_Android Sensors - Fatal编程技术网

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

Android 如何使用传感器加速计数据沿X轴和Y轴移动图像视图,android,android-imageview,android-sensors,Android,Android Imageview,Android Sensors,我有一个超大的图像,我想用加速计的值上下左右移动。我已经创建了下面的代码,但是图像以不同的步骤移动并且不能平滑滑动 float[] matrix = new float[9]; mMatrix.getValues(matrix); if (accelerometerValues[0] < MOVE_RIGHT_LIMIT) { mMatrix.setTranslate(matrix[2] + 10, matrix[5] ); mSchematicDiagram.setImageMa

我有一个超大的图像,我想用加速计的值上下左右移动。我已经创建了下面的代码,但是图像以不同的步骤移动并且不能平滑滑动

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");
float[]矩阵=新浮点[9];
mMatrix.getValues(矩阵);
if(加速计值[0]<向右移动\u限制){
矩阵[2]+10,矩阵[5]);
mSchematicDiagram.setImageMatrix(mMatrix);
Log.d(“PROJECTA_传感器”,“向右移动”);

在这种用例中使用setTranslate on ImageView矩阵正确吗?您将如何创建这种平滑过渡?

我不确定您要移动哪种图像以及为什么要使用矩阵,但如果您有一个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);

    }
}
这是我的MainActivity代码,它工作得很好(我只需要添加边框,因为当前图像可以移出屏幕边框),可能会对某些人有所帮助

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

    }
}