I have been banging my head for a while trying to figure out why my custom
view was not drawing properly until I tried turning off hardware
acceleration.
It is to do with canvas.drawCircle. It is drawn in solid blue at about
300px radius.
I also use canvas.drawText and that works fine under hardware acceleration.
The only thing I can think of is that I a using an unsymmetrical
canvas.scale...
Here is my code:
// Called to redraw the map
@Override
protected void onDraw(Canvas canvas) {
// Check if we are in Eclipse UI editor
if (isInEditMode()) {
return;
}
// Save the canvas' transforms for unscaled UI elements
canvas.save();
// Place the map offset in centre of screen
canvas.translate(getWidth() / 2, getHeight() / 2);
// Zoom the map
canvas.scale((float) (-1.0 / mMapController.getMapMetresPerPixelX()),
(float) (-1.0 / mMapController.getMapMetresPerPixelY()));
// Pan the map
canvas.translate((float) mMapController.getMapCentreX(), (float)
mMapController.getMapCentreY());
// Draw a circle
canvas.drawCircle(0.0f, 0.0f, 0.01f, mCirclePaint);
// Restore the canvas' transforms for unscaled UI elements
canvas.restore();
// Draw the map centre coordinated and scale in top left
canvas.drawText("Centre Coord: (" + String.format("%.4f",
mMapController.getMapCentreX()) + ", " + String.format("%.4f",
mMapController.getMapCentreY()) + ")", 16.0f * mDisplayMetrics.density,
36.0f * mDisplayMetrics.scaledDensity, mCoordPaint);
canvas.drawText("Scale:" + String.format("%.4f",
mMapController.getMapScale()), 16.0f * mDisplayMetrics.density, 54.0f *
mDisplayMetrics.scaledDensity, mCoordPaint);
}
The values of the various variables from the debugger:
isInEditMode() = false
getWidth() = 1080
getHeight() = 1701
getMapMetresPerPixelX() = 5.37037039426811E-5
getMapMetresPerPixelY() = -5.364583215838397E-5
getMapCentreX() = 0.0
getMapCentreY() = 0.0
getMapScale() = 1.0
mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mCirclePaint.setColor(Color.BLUE);
mCoordPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mCoordPaint.setColor(Color.BLACK);
mCoordPaint.setTextSize(18.0f * mDisplayMetrics.scaledDensity);
mDisplayMetrics.density = 3.0
mDisplayMettrics.scaledDensity = 3.0
I hope that helps figure it out.
I am going to try on the emulator with 4.2 too see what happens.
Leith
--
--
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
---
You received this message because you are subscribed to the Google Groups
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.