android - 位图未显示在 Canvas 上

标签 android android-canvas surfaceview android-bitmap

我在 Canvas 上绘制位图。我将 Canvas 和位图的尺寸设置为变量并打印出它们各自的值。当我尝试绘制位图时,它没有显示出来。

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 输出:

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

如果我将 dst Rect 变量的底部参数更改为除其当前值以外的任何值,则会显示位图。例如,如果我改变了

dst = new Rect(.....,canvasWidth*(......));

dst = new Rect(.....,canvasWidth));

它将显示。

正如您在 logcat 输出中所见,

canvasWidth*(memoryManiaHeight/memoryManiaWidth)

评估为 0。为什么会发生这种情况,我该如何解决?

最佳答案

从此改变你的计算:

canvasWidth*(memoryManiaHeight/memoryManiaWidth)

为此:

(canvasWidth*memoryManiaHeight)/memoryManiaWidth

如果您首先评估 (memoryManiaHeight/memoryManiaWidth),那么由于整数除法,它将评估为零。

关于android - 位图未显示在 Canvas 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857725/

相关文章:

android - native 库(.so 文件)未添加到 android 项目

android - Webview 未从 URL 加载 PDF

android - 获取ImageView绘制区域的高度和宽度

java - 如何压缩图像大小

java - Android SurfaceView 闪烁

Android:strings.xml 中的 html

android - Android 13 设备中面临高 ANR 率

android - 如何在android Canvas 上使用base64编码的图像数据绘制图像

android - 绘图 Canvas FC

android - SurfaceView 到位图