I have canvas that I am drawing a bitmap on. I set the dimensions of the canvas and bitmap to variables and printed out their respective values. When I try to draw the bitmap it does not show up.
Code for SurfaceView:
protected void onDraw(Canvas canvas) {
if (canvas != null) {
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
int canvasWidth = canvas.getWidth();
int canvasHeight = canvas.getHeight();
int memoryManiaWidth = memoryMania.getWidth();
int memoryManiaHeight = memoryMania.getHeight();
Rect src = new Rect(0,0,memoryManiaWidth,memoryManiaHeight);
Rect dst = new Rect(0,0,canvasWidth,canvasWidth*(memoryManiaHeight/memoryManiaWidth));
Log.d("MM","CW"+ String.valueOf(canvasWidth));
Log.d("MM","MMH" + String.valueOf((memoryManiaHeight)));
Log.d("MM","MMW" + String.valueOf((memoryManiaWidth)));
Log.d("MM",String.valueOf(canvasWidth*(memoryManiaHeight/memoryManiaWidth)));
canvas.drawBitmap(memoryMania,src,dst,paint);
}
}
Logcat Output:
06-15 21:56:07.395 22939-23030/com.delg.andrew.memorymania D/MM﹕ CW1080
06-15 21:56:07.395 22939-23030/com.delg.andrew.memorymania D/MM﹕ MMH419
06-15 21:56:07.395 22939-23030/com.delg.andrew.memorymania D/MM﹕ MMW951
06-15 21:56:07.395 22939-23030/com.delg.andrew.memorymania D/MM﹕ 0
The bitmap displays if I change the bottom parameter of the dst Rect variable to anything but its present value. For example if i changed
dst = new Rect(.....,canvasWidth*(......));
to
dst = new Rect(.....,canvasWidth));
it will display.
As you can see in the logcat output,
canvasWidth*(memoryManiaHeight/memoryManiaWidth)
is evaluated to 0. Why is this happening and what can I do to fix it?
Change your calculation from this:
to this:
If you evaluate
(memoryManiaHeight/memoryManiaWidth)
first then it will evaluate to zero due to integer division.