thanks for your reply.

I changed this part to

        if (mValues != null) {
               matrix.reset();
               matrix.setRotate(-mValues[0]);
               mPath.transform(matrix);
           }

However, the transformation still goes infinitely. what should be the
correct method ? thanks!


On Sep 9, 6:08 am, Kostya Vasilyev <kmans...@gmail.com> wrote:
> Matrix transformation methods are cumulative. If you wish to apply absolute
> transformation values, you need to reset the matrix to identity first.
>
> --
> Kostya Vasilyev --http://kmansoft.wordpress.com
>
> 08.09.2010 15:19 пользователь "dadada" <ytbr...@gmail.com> написал:
>
> hello all,
>
> i used matrix to rotate instead of the canvas.
>
> However, the result isn't what i expected. The path just rotate
> infinitely without stopping.
>
> below is my code. it is a modification of the compass.java in
> apidemo.  can someone please give me some advice on this?
>
> import android.content.Context;
> import android.graphics.*;
> import android.hardware.SensorListener;
> import android.hardware.SensorManager;
> import android.os.Bundle;
> import android.util.Config;
> import android.util.Log;
> import android.view.View;
> import android.view.animation.AccelerateInterpolator;
> import android.view.animation.Animation;
>
> public class Compass extends GraphicsActivity {
>
>    private static final String TAG = "Compass";
>
>        private SensorManager mSensorManager;
>    private SampleView mView;
>    private float[] mValues;
>
>    private final SensorListener mListener = new SensorListener()
>    {
>        public void onSensorChanged(int sensor, float[] values)
>        {
>            if (Config.LOGD) Log.d(TAG, "sensorChanged (" + values[0]
> + ", " + values[1] + ", " + values[2] + ")");
>            mValues = values;
>            if (mView != null) {
>                mView.invalidate();
>            }
>        }
>        public void onAccuracyChanged(int sensor, int accuracy)
>        {
>            // TODO Auto-generated method stub
>
>        }
>    };
>
>   �...@override
>    protected void onCreate(Bundle icicle) {
>        super.onCreate(icicle);
>        mSensorManager =
> (SensorManager)getSystemService(Context.SENSOR_SERVICE);
>        mView = new SampleView(this);
>        setContentView(mView);
>    }
>
>   �...@override
>    protected void onResume()
>    {
>        if (Config.LOGD) Log.d(TAG, "onResume");
>        super.onResume();
>        mSensorManager.registerListener(mListener,
>                        SensorManager.SENSOR_ORIENTATION,
>                        SensorManager.SENSOR_DELAY_GAME);
>    }
>
>   �...@override
>    protected void onStop()
>    {
>        if (Config.LOGD) Log.d(TAG, "onStop");
>        mSensorManager.unregisterListener(mListener);
>        super.onStop();
>    }
>
>    private class SampleView extends View {
>        private Paint   mPaint = new Paint();
>        private Path    mPath = new Path();
>        private boolean mAnimate;
>        private long    mNextTime;
>        private Matrix matrix = new Matrix();
>
>        public SampleView(Context context) {
>            super(context);
>            // Construct a wedge-shaped path
>            mPath.moveTo(0, -50);
>            mPath.lineTo(-20, 60);
>            mPath.lineTo(0, 50);
>            mPath.lineTo(20, 60);
>            mPath.close();
>            matrix.postScale(10, 10);
>        }
>
>       �...@override protected void onDraw(Canvas canvas) {
>
>                Paint paint2 = new Paint();
>                paint2.setColor(Color.BLUE);
>            paint2.setStyle(Paint.Style.FILL);
>                paint2.setAlpha(120);
>
>                Paint paint3 = new Paint();
>                paint3.setColor(Color.GREEN);
>            paint3.setStyle(Paint.Style.FILL);
>                paint3.setAlpha(200);
>
>                Paint paint4 = new Paint();
>                paint4.setColor(Color.GRAY);
>            paint4.setStyle(Paint.Style.FILL);
>                paint4.setAlpha(120);
>
>                Paint paint5 = new Paint();
>                paint5.setColor(Color.GRAY);
>                paint5.setStyle(Paint.Style.FILL_AND_STROKE);
>                paint5.setAlpha(120);
>
>            Paint paint = mPaint;
>            canvas.drawColor(Color.WHITE);
>
>            paint.setAntiAlias(true);
>            paint.setColor(Color.RED);
>            paint.setStyle(Paint.Style.FILL);
>            paint.setAlpha(120);
>
>            int w = canvas.getWidth();
>            int h = canvas.getHeight();
>            int cx = w / 2;
>            int cy = h / 2;
>
>            canvas.translate(cx, cy);
>            if (mValues != null) {
>                matrix.setRotate(-mValues[0]);
>                mPath.transform(matrix);
> //                canvas.rotate(-mValues[0]);
>            }
>            canvas.drawPath(mPath, mPaint);
>            String str = "";
>            String direction = "";
>            if (mValues != null) {
>                str = "Azimuth: " + Float.toString(-mValues[0]);
>
>                if(-mValues[0] < 0 && -mValues[0] > -1){
>                        direction = "Direction: North";
>                }else if(-mValues[0] < 1 && -mValues[0] > -90){
>                        direction = "Direction: North East";
>                }else if(-mValues[0] < -90 && -mValues[0] > -91){
>                        direction = "Direction: East";
>                }else if(-mValues[0] < -91 && -mValues[0] > -180){
>                        direction = "Direction: South East";
>                }else if(-mValues[0] < -180 && -mValues[0] > -181){
>                        direction = "Direction: South";
>                }else if(-mValues[0] < -181 && -mValues[0] > -270){
>                        direction = "Direction: South West";
>                }else if(-mValues[0] < -270 && -mValues[0] > -271){
>                        direction = "Direction: West";
>                }else if(-mValues[0] < -271 && -mValues[0] > -360){
>                        direction = "Direction: North West";
>                }
>            }
>            canvas.drawText(str, 0, 100, mPaint);
>            canvas.drawText(direction, 0, 110, mPaint);
>
>            canvas.drawCircle(0, 200, 20, paint2);
>            canvas.drawCircle(0, 200, 4, paint3);
>            canvas.drawCircle(0, 200, 30, paint4);
>            canvas.drawCircle(0, 200, 50, paint4);
>
>        }
>
>       �...@override
>        protected void onAttachedToWindow() {
>            mAnimate = true;
>            super.onAttachedToWindow();
>        }
>
>       �...@override
>        protected void onDetachedFromWindow() {
>            mAnimate = false;
>            super.onDetachedFromWindow();
>
> }
> }
> }
>
> On Sep 8, 4:18 pm, dadada <ytbr...@gmail.com> wrote:
>
>
>
> > hi all,
>
> > i tried th...

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to