Home | History | Annotate | Download | only in graphics
      1 /*
      2  * Copyright (C) 2007 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.example.android.apis.graphics;
     18 
     19 import android.content.Context;
     20 import android.graphics.*;
     21 import android.hardware.Sensor;
     22 import android.hardware.SensorEvent;
     23 import android.hardware.SensorEventListener;
     24 import android.hardware.SensorManager;
     25 import android.os.Bundle;
     26 import android.util.Log;
     27 import android.view.View;
     28 
     29 public class Compass extends GraphicsActivity {
     30 
     31     private static final String TAG = "Compass";
     32 
     33     private SensorManager mSensorManager;
     34     private Sensor mSensor;
     35     private SampleView mView;
     36     private float[] mValues;
     37 
     38     private final SensorEventListener mListener = new SensorEventListener() {
     39         public void onSensorChanged(SensorEvent event) {
     40             if (false) Log.d(TAG,
     41                     "sensorChanged (" + event.values[0] + ", " + event.values[1] + ", " + event.values[2] + ")");
     42             mValues = event.values;
     43             if (mView != null) {
     44                 mView.invalidate();
     45             }
     46         }
     47 
     48         public void onAccuracyChanged(Sensor sensor, int accuracy) {
     49         }
     50     };
     51 
     52     @Override
     53     protected void onCreate(Bundle icicle) {
     54         super.onCreate(icicle);
     55         mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
     56         mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
     57         mView = new SampleView(this);
     58         setContentView(mView);
     59     }
     60 
     61     @Override
     62     protected void onResume()
     63     {
     64         if (false) Log.d(TAG, "onResume");
     65         super.onResume();
     66 
     67         mSensorManager.registerListener(mListener, mSensor,
     68                 SensorManager.SENSOR_DELAY_GAME);
     69     }
     70 
     71     @Override
     72     protected void onStop()
     73     {
     74         if (false) Log.d(TAG, "onStop");
     75         mSensorManager.unregisterListener(mListener);
     76         super.onStop();
     77     }
     78 
     79     private class SampleView extends View {
     80         private Paint   mPaint = new Paint();
     81         private Path    mPath = new Path();
     82         private boolean mAnimate;
     83 
     84         public SampleView(Context context) {
     85             super(context);
     86 
     87             // Construct a wedge-shaped path
     88             mPath.moveTo(0, -50);
     89             mPath.lineTo(-20, 60);
     90             mPath.lineTo(0, 50);
     91             mPath.lineTo(20, 60);
     92             mPath.close();
     93         }
     94 
     95         @Override protected void onDraw(Canvas canvas) {
     96             Paint paint = mPaint;
     97 
     98             canvas.drawColor(Color.WHITE);
     99 
    100             paint.setAntiAlias(true);
    101             paint.setColor(Color.BLACK);
    102             paint.setStyle(Paint.Style.FILL);
    103 
    104             int w = canvas.getWidth();
    105             int h = canvas.getHeight();
    106             int cx = w / 2;
    107             int cy = h / 2;
    108 
    109             canvas.translate(cx, cy);
    110             if (mValues != null) {
    111                 canvas.rotate(-mValues[0]);
    112             }
    113             canvas.drawPath(mPath, mPaint);
    114         }
    115 
    116         @Override
    117         protected void onAttachedToWindow() {
    118             mAnimate = true;
    119             if (false) Log.d(TAG, "onAttachedToWindow. mAnimate=" + mAnimate);
    120             super.onAttachedToWindow();
    121         }
    122 
    123         @Override
    124         protected void onDetachedFromWindow() {
    125             mAnimate = false;
    126             if (false) Log.d(TAG, "onDetachedFromWindow. mAnimate=" + mAnimate);
    127             super.onDetachedFromWindow();
    128         }
    129     }
    130 }
    131