如题,大家谈下想法和思路,有源码的拿出来大家共享下就更好了

解决方案 »

  1.   

    额。API DEMO中有、、 我上午还看到过@ 很详细的@@ 我帮你找找哈@@
      

  2.   

    Apidemo中
    package com.example.android.apis.os;
    Sensors.class
    楼主看看 代码大概是这样的。。
    /*
     * Copyright (C) 2007 The Android Open Source Project
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */package com.example.android.apis.os;import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.hardware.SensorManager;
    import android.hardware.SensorListener;
    import android.util.Log;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.graphics.RectF;/**
     * <h3>Application that displays the values of the acceleration sensor graphically.</h3><p>This demonstrates the {@link android.hardware.SensorManager android.hardware.SensorManager} class.<h4>Demo</h4>
    OS / Sensors
     
    <h4>Source files</h4>
     * <table class="LinkTable">
     *         <tr>
     *             <td >src/com.example.android.apis/os/Sensors.java</td>
     *             <td >Sensors</td>
     *         </tr>
     * </table> 
     */
    public class Sensors extends Activity {
        /** Tag string for our debug logs */
        private static final String TAG = "Sensors";    private SensorManager mSensorManager;
        private GraphView mGraphView;    private class GraphView extends View implements SensorListener
        {
            private Bitmap  mBitmap;
            private Paint   mPaint = new Paint();
            private Canvas  mCanvas = new Canvas();
            private Path    mPath = new Path();
            private RectF   mRect = new RectF();
            private float   mLastValues[] = new float[3*2];
            private float   mOrientationValues[] = new float[3];
            private int     mColors[] = new int[3*2];
            private float   mLastX;
            private float   mScale[] = new float[2];
            private float   mYOffset;
            private float   mMaxX;
            private float   mSpeed = 1.0f;
            private float   mWidth;
            private float   mHeight;
            
            public GraphView(Context context) {
                super(context);
                mColors[0] = Color.argb(192, 255, 64, 64);
                mColors[1] = Color.argb(192, 64, 128, 64);
                mColors[2] = Color.argb(192, 64, 64, 255);
                mColors[3] = Color.argb(192, 64, 255, 255);
                mColors[4] = Color.argb(192, 128, 64, 128);
                mColors[5] = Color.argb(192, 255, 255, 64);            mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
                mRect.set(-0.5f, -0.5f, 0.5f, 0.5f);
                mPath.arcTo(mRect, 0, 180);
            }
            
            @Override
            protected void onSizeChanged(int w, int h, int oldw, int oldh) {
                mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);
                mCanvas.setBitmap(mBitmap);
                mCanvas.drawColor(0xFFFFFFFF);
                mYOffset = h * 0.5f;
                mScale[0] = - (h * 0.5f * (1.0f / (SensorManager.STANDARD_GRAVITY * 2)));
                mScale[1] = - (h * 0.5f * (1.0f / (SensorManager.MAGNETIC_FIELD_EARTH_MAX)));
                mWidth = w;
                mHeight = h;
                if (mWidth < mHeight) {
                    mMaxX = w;
                } else {
                    mMaxX = w-50;
                }
                mLastX = mMaxX;
                super.onSizeChanged(w, h, oldw, oldh);
            }        @Override
            protected void onDraw(Canvas canvas) {
                synchronized (this) {
                    if (mBitmap != null) {
                        final Paint paint = mPaint;
                        final Path path = mPath;
                        final int outer = 0xFFC0C0C0;
                        final int inner = 0xFFff7010;                    if (mLastX >= mMaxX) {
                            mLastX = 0;
                            final Canvas cavas = mCanvas;
                            final float yoffset = mYOffset;
                            final float maxx = mMaxX;
                            final float oneG = SensorManager.STANDARD_GRAVITY * mScale[0];
                            paint.setColor(0xFFAAAAAA);
                            cavas.drawColor(0xFFFFFFFF);
                            cavas.drawLine(0, yoffset,      maxx, yoffset,      paint);
                            cavas.drawLine(0, yoffset+oneG, maxx, yoffset+oneG, paint);
                            cavas.drawLine(0, yoffset-oneG, maxx, yoffset-oneG, paint);
                        }
                        canvas.drawBitmap(mBitmap, 0, 0, null);                    float[] values = mOrientationValues;
                        if (mWidth < mHeight) {
                            float w0 = mWidth * 0.333333f;
                            float w  = w0 - 32;
                            float x = w0*0.5f;
                            for (int i=0 ; i<3 ; i++) {
                                canvas.save(Canvas.MATRIX_SAVE_FLAG);
                                canvas.translate(x, w*0.5f + 4.0f);
                                canvas.save(Canvas.MATRIX_SAVE_FLAG);
                                paint.setColor(outer);
                                canvas.scale(w, w);
                                canvas.drawOval(mRect, paint);
                                canvas.restore();
                                canvas.scale(w-5, w-5);
                                paint.setColor(inner);
                                canvas.rotate(-values[i]);
                                canvas.drawPath(path, paint);
                                canvas.restore();
                                x += w0;
                            }
                        } else {
                            float h0 = mHeight * 0.333333f;
                            float h  = h0 - 32;
                            float y = h0*0.5f;
                            for (int i=0 ; i<3 ; i++) {
                                canvas.save(Canvas.MATRIX_SAVE_FLAG);
                                canvas.translate(mWidth - (h*0.5f + 4.0f), y);
                                canvas.save(Canvas.MATRIX_SAVE_FLAG);
                                paint.setColor(outer);
                                canvas.scale(h, h);
                                canvas.drawOval(mRect, paint);
                                canvas.restore();
                                canvas.scale(h-5, h-5);
                                paint.setColor(inner);
                                canvas.rotate(-values[i]);
                                canvas.drawPath(path, paint);
                                canvas.restore();
                                y += h0;
                            }
                        }                }
                }
            }        public void onSensorChanged(int sensor, float[] values) {
                //Log.d(TAG, "sensor: " + sensor + ", x: " + values[0] + ", y: " + values[1] + ", z: " + values[2]);
                synchronized (this) {
                    if (mBitmap != null) {
                        final Canvas canvas = mCanvas;
                        final Paint paint = mPaint;
                        if (sensor == SensorManager.SENSOR_ORIENTATION) {
                            for (int i=0 ; i<3 ; i++) {
                                mOrientationValues[i] = values[i];
                            }
                        } else {
                            float deltaX = mSpeed;
                            float newX = mLastX + deltaX;                        int j = (sensor == SensorManager.SENSOR_MAGNETIC_FIELD) ? 1 : 0;
                            for (int i=0 ; i<3 ; i++) {
                                int k = i+j*3;
                                final float v = mYOffset + values[i] * mScale[j];
                                paint.setColor(mColors[k]);
                                canvas.drawLine(mLastX, mLastValues[k], newX, v, paint);
                                mLastValues[k] = v;
                            }
                            if (sensor == SensorManager.SENSOR_MAGNETIC_FIELD)
                                mLastX += mSpeed;
                        }
                        invalidate();
                    }
                }
            }        public void onAccuracyChanged(int sensor, int accuracy) {
                // TODO Auto-generated method stub
                
            }
        }
        
        /**
         * Initialization of the Activity after it is first created.  Must at least
         * call {@link android.app.Activity#setContentView setContentView()} to
         * describe what is to be displayed in the screen.
         */
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // Be sure to call the super class.
            super.onCreate(savedInstanceState);        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
            mGraphView = new GraphView(this);
            setContentView(mGraphView);
        }    @Override
        protected void onResume() {
            super.onResume();
            mSensorManager.registerListener(mGraphView, 
                    SensorManager.SENSOR_ACCELEROMETER | 
                    SensorManager.SENSOR_MAGNETIC_FIELD | 
                    SensorManager.SENSOR_ORIENTATION,
                    SensorManager.SENSOR_DELAY_FASTEST);
        }
        
        @Override
        protected void onStop() {
            mSensorManager.unregisterListener(mGraphView);
            super.onStop();
        }
    }