diff options
| author | Mathias Agopian <mathias@google.com> | 2011-05-17 20:22:04 -0700 |
|---|---|---|
| committer | Mathias Agopian <mathias@google.com> | 2011-05-27 16:36:58 -0700 |
| commit | 35ccf46533c76cdc7c2f6c0ce8f33b34b29bc5e6 (patch) | |
| tree | 8cafb0c046480991c44d281435cd328d90b9161e /tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java | |
| parent | 9ff73de08f137ba03e18b8fd9fe0b070029c00f5 (diff) | |
| download | frameworks_base-35ccf46533c76cdc7c2f6c0ce8f33b34b29bc5e6.zip frameworks_base-35ccf46533c76cdc7c2f6c0ce8f33b34b29bc5e6.tar.gz frameworks_base-35ccf46533c76cdc7c2f6c0ce8f33b34b29bc5e6.tar.bz2 | |
model rotation can now be controlled by the device's sensors
Diffstat (limited to 'tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java')
| -rw-r--r-- | tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java index 9ab0f22..4b7836b 100644 --- a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java +++ b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java @@ -16,29 +16,46 @@ package com.android.modelviewer; +import android.renderscript.Matrix4f; import android.renderscript.RSSurfaceView; import android.renderscript.RenderScriptGL; import android.content.Context; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.ScaleGestureDetector; import android.util.Log; -public class SimpleModelView extends RSSurfaceView { +public class SimpleModelView extends RSSurfaceView implements SensorEventListener { private RenderScriptGL mRS; private SimpleModelRS mRender; private ScaleGestureDetector mScaleDetector; + private SensorManager mSensorManager; + private Sensor mRotationVectorSensor; + private final float[] mRotationMatrix = new float[16]; + private static final int INVALID_POINTER_ID = -1; private int mActivePointerId = INVALID_POINTER_ID; + private boolean mUseSensor = false; + private Matrix4f mIdentityMatrix = new Matrix4f(); public SimpleModelView(Context context) { super(context); ensureRenderScript(); mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); + // Get an instance of the SensorManager + mSensorManager = (SensorManager)getContext().getSystemService(Context.SENSOR_SERVICE); + // find the rotation-vector sensor + mRotationVectorSensor = mSensorManager.getDefaultSensor( + Sensor.TYPE_ROTATION_VECTOR); + mIdentityMatrix.loadIdentity(); } private void ensureRenderScript() { @@ -52,6 +69,16 @@ public class SimpleModelView extends RSSurfaceView { } @Override + public void resume() { + mSensorManager.registerListener(this, mRotationVectorSensor, 10000); + } + + @Override + public void pause() { + mSensorManager.unregisterListener(this); + } + + @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); ensureRenderScript(); @@ -139,6 +166,32 @@ public class SimpleModelView extends RSSurfaceView { return true; } } -} + public void onSensorChanged(SensorEvent event) { + // we received a sensor event. it is a good practice to check + // that we received the proper event + if (mUseSensor) { + if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) { + // convert the rotation-vector to a 4x4 matrix. the matrix + // is interpreted by Open GL as the inverse of the + // rotation-vector, which is what we want. + SensorManager.getRotationMatrixFromVector( + mRotationMatrix , event.values); + + if (mRender != null) { + mRender.onPostureChanged(new Matrix4f(mRotationMatrix)); + } + } + } + } + + public void onAccuracyChanged(Sensor sensor, int accuracy) { + } + public void toggleSensor() { + mUseSensor = !mUseSensor; + if (mUseSensor == false) { + mRender.onPostureChanged(mIdentityMatrix); + } + } +} |
