I noticed that too but the book I am learning from doesn't say anywhere that you need it.
On Wed, Jun 15, 2011 at 10:43 AM, gjs <[email protected]> wrote: > Hi, > > I don't see any reference to the compass sensor in your code, just a > few references to 'bearing' how is it set ? > > Regards > > On Jun 15, 3:39 am, Raghav Sood <[email protected]> wrote: > > Hi all, > > > > According to the book I am learning from the following code should > > create a sad looking, but working, compass. All I have managed to get > > is the sad lookout of it. The compass draws correctly but doesn't > > rotate. I am testing it on a real device with a accelerometer. The > > rest of the files in the project have nothing to do with the rotation. > > Everything happens in this class. Could anyone point me to my mistake? > > Any help would be appreciated. > > > > package com.raghavsood.compass; > > > > import android.content.Context; > > import android.graphics.*; > > import android.view.*; > > import android.util.AttributeSet; > > import android.content.res.Resources; > > > > public class CompassView extends View { > > > > private Paint markerPaint; > > private Paint textPaint; > > private Paint circlePaint; > > private String northString; > > private String eastString; > > private String southString; > > private String westString; > > private int textHeight; > > > > private float bearing; > > public void setBearing(float _bearing) { > > bearing = _bearing; > > } > > public float getBearing() { > > return bearing; > > } > > > > public CompassView(Context context) { > > super(context); > > initCompassView(); > > } > > > > public CompassView(Context context, AttributeSet attrs) { > > super(context, attrs); > > initCompassView(); > > } > > > > public CompassView(Context context, > > AttributeSet ats, > > int defaultStyle) { > > super(context, ats, defaultStyle); > > initCompassView(); > > } > > > > protected void initCompassView() { > > setFocusable(true); > > > > Resources r = this.getResources(); > > > > circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); > > circlePaint.setColor(r.getColor(R.color.background_color)); > > circlePaint.setStrokeWidth(1); > > circlePaint.setStyle(Paint.Style.FILL_AND_STROKE); > > > > northString = r.getString(R.string.cardinal_north); > > eastString = r.getString(R.string.cardinal_east); > > southString = r.getString(R.string.cardinal_south); > > westString = r.getString(R.string.cardinal_west); > > > > textPaint = new Paint(Paint.ANTI_ALIAS_FLAG); > > textPaint.setColor(r.getColor(R.color.text_color)); > > > > textHeight = (int)textPaint.measureText("yY"); > > > > markerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); > > markerPaint.setColor(r.getColor(R.color.marker_color)); > > } > > > > @Override > > protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { > > // The compass is a circle that fills as much space as possible. > > // Set the measured dimensions by figuring out the shortest boundary, > > // height or width. > > int measuredWidth = measure(widthMeasureSpec); > > int measuredHeight = measure(heightMeasureSpec); > > > > int d = Math.min(measuredWidth, measuredHeight); > > > > setMeasuredDimension(d, d); > > } > > > > private int measure(int measureSpec) { > > int result = 0; > > > > // Decode the measurement specifications. > > int specMode = MeasureSpec.getMode(measureSpec); > > int specSize = MeasureSpec.getSize(measureSpec); > > > > if (specMode == MeasureSpec.UNSPECIFIED) { > > // Return a default size of 200 if no bounds are specified. > > result = 200; > > } else { > > // As you want to fill the available space > > // always return the full available bounds. > > result = specSize; > > } > > return result; > > } > > > > @Override > > protected void onDraw(Canvas canvas) { > > int px = getMeasuredWidth() / 2; > > int py = getMeasuredHeight() /2 ; > > > > int radius = Math.min(px, py); > > // Draw the background > > canvas.drawCircle(px, py, radius, circlePaint); > > // Rotate our perspective so that the ‘top’ is > > // facing the current bearing. > > canvas.save(); > > canvas.rotate(-bearing, px, py); > > int textWidth = (int)textPaint.measureText("W"); > > int cardinalX = px-textWidth/2; > > int cardinalY = py-radius+textHeight; > > > > // Draw the marker every 15 degrees and text every 45. > > for (int i = 0; i < 24; i++) { > > // Draw a marker. > > canvas.drawLine(px, py-radius, px, py-radius+10, markerPaint); > > > > canvas.save(); > > canvas.translate(0, textHeight); > > > > // Draw the cardinal points > > if (i % 6 == 0) { > > String dirString = ""; > > switch (i) { > > case(0) : { > > dirString = northString; > > int arrowY = 2*textHeight; > > canvas.drawLine(px, arrowY, px-5, 3*textHeight, > > markerPaint); > > canvas.drawLine(px, arrowY, px+5, 3*textHeight, > > markerPaint); > > break; > > } > > case(6) : dirString = eastString; break; > > case(12) : dirString = southString; break; > > case(18) : dirString = westString; break; > > } > > canvas.drawText(dirString, cardinalX, cardinalY, textPaint); > > } > > > > else if (i % 3 == 0) { > > // Draw the text every alternate 45deg > > String angle = String.valueOf(i*15); > > float angleTextWidth = textPaint.measureText(angle); > > > > int angleTextX = (int)(px-angleTextWidth/2); > > int angleTextY = py-radius+textHeight; > > canvas.drawText(angle, angleTextX, angleTextY, textPaint); > > } > > canvas.restore(); > > > > canvas.rotate(15, px, py); > > } > > canvas.restore(); > > } > > > > } > > > > Thanks > > -- > > Raghav Soodhttp:// > www.raghavsood.com/http://www.androidappcheck.com/http://www.telstop.tel/ > > -- > 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 -- Raghav Sood http://www.raghavsood.com/ http://www.androidappcheck.com/ http://www.telstop.tel/ -- 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

