Have you done any debugging? Looked at the raw sensor readings to make sure they make sense? Implemented the algorithm in Java on a desktop, fed in sensor numbers, and checked whether it produced what you expected?
On Sep 16, 11:26 am, Pedro Teixeira <[email protected]> wrote: > Hi everyone..I'm trying to implement spomething that I don't even know > if it's possible.. > > So I have this class which implements a SensorEventListener like > this: > private SensorEventListener mySensorEventListener = new > SensorEventListener(){ > @Override > public void onAccuracyChanged(Sensor sensor, int accuracy) { > } > @Override > public void onSensorChanged(SensorEvent event) { > myCompass.updateDirection((float)event.values[0]); > } > }; > > And a class that handles the way the compass looks like this: > > public static class compassLook extends View { > private Paint paintPointer = new Paint(Paint.ANTI_ALIAS_FLAG); > private Paint paintCircle = new Paint(Paint.ANTI_ALIAS_FLAG); > private Paint paintLeters = new Paint(Paint.ANTI_ALIAS_FLAG); > private boolean firstDraw; > private float direction = 0 ; > > public compassLook(Context context) { > super(context); > init(); > } > > public compassLook(Context context, AttributeSet attrs) { > super(context, attrs); > init(); > } > > public compassLook(Context context, AttributeSet attrs, int > defStyle) { > super(context, attrs, defStyle); > init(); > } > > private void init(){ > paintPointer.setStyle(Paint.Style.STROKE); > paintPointer.setStrokeWidth(3); > paintPointer.setColor(Color.argb(255, 209, 114, 2)); > paintCircle.setStyle(Paint.Style.STROKE); > paintCircle.setStrokeWidth(2); > paintCircle.setColor(Color.argb(150, 255, 255, 255)); > paintLeters.setStyle(Paint.Style.STROKE); > paintLeters.setStrokeWidth(1); > paintLeters.setColor(Color.argb(230, 255, 255, 255)); > paintLeters.setTextSize(12); > firstDraw = true; > } > > @Override > protected void onMeasure(int widthMeasureSpec, int > heightMeasureSpec) { > setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), > MeasureSpec.getSize(heightMeasureSpec)); > } > > @Override > protected void onDraw(Canvas canvas) { > int cxCompass = (getMeasuredWidth()/2); > int cyCompass = (getMeasuredHeight()/2); > float radiusCompass; > if(cxCompass > cyCompass){ > radiusCompass = (float) (cyCompass * 0.9); > } > else{ > radiusCompass = (float) (cxCompass * 0.9); > } > canvas.drawCircle(cxCompass-50, cyCompass, radiusCompass, > paintCircle); > > if(!firstDraw){ > > // Desenho da linha que aponta > canvas.drawLine(cxCompass-50, cyCompass, > (float)(cxCompass-50 + radiusCompass * Math.sin((double)(- > direction) * 3.14/180)), > (float)(cyCompass - radiusCompass * > Math.cos((double)(-direction) > * 3.14/180)), > paintPointer); > double mLatitude = (mLocation.getLatitude() / 1E6); // I > get this > value from a LM request > double mLongitude = (mLocation.getLongitude() / 1E6); // I > get this > value from a LM request > double picLatitude = Double.parseDouble(picLatitudeString); > // I get > this value from a bundle > double picLongitude = Double.parseDouble(picLongitudeString); > // I > get this value from a bundle > float direction = (float) > Math.toDegrees(Math.atan2(picLongitude- > mLongitude, picLatitude-mLatitude)); > float distancia = (float) > (Math.sqrt(Math.pow(mLatitude- > picLatitude, 2) + Math.pow(mLongitude-picLongitude,2)))/2; > //Desenho do texto que indica a distancia > canvas.drawText(String.valueOf(distancia) + "Km", > cxCompass-30, > cyCompass+20, paintLeters); > } > > } > > public void updateDirection(float dir) > { > firstDraw = false; > direction = dir; > invalidate(); > } > > } > > This classes work perfectlly showing me a little circle with a line > pointing the North. > > What I would like to do, is ..given this 2 points in space (mLatitude, > mLongitude) and (picLatitude, picLongitude) which are the user > position, and a certain picture position. I'd like the compass to > point to the position of the picture (picLatitude,picLongitude) from > the position they are in the moment (mLatitude,mLongitude) > > I came to the trignometry formula that calculates this..being: > > float direction = (float) Math.toDegrees(Math.atan2(picLongitude- > mLongitude, picLatitude-mLatitude)); > > But when I use it on the updateDirection, the compass line stays > static.. doesn't moves just like it moved when the direction was 0 > (north) > > Do you have any ideia how can I implement this so that the compass is > always pointing the picture position and not the north? > > Thank you very much..if you didnt understood what I meant here, > basically I want a line that points me to an Latitude,Longitude > position other than the north itself. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

