位图在 Android Watch 的 WatchFaceService 的 onSurfaceChanged 内部显示不同的分辨率

Bitmap is showing different resoulation inside onSurfaceChanged of WatchFaceService of Android Watch

我使用的位图分辨率是 480 x 480。

当我尝试使用下面的代码在 onSurfaceChanged 中获取此位图的宽度时。

    public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
             super.onSurfaceChanged(holder, format, width, height);

             bDialBg = BitmapFactory.decodeResource(getResources(), R.drawable.dial_bg);
             scale = ((float) width) / (float) bDialBg.getWidth();
    }

bDialBg.getWidth() 结果应该是 480,因为我的图像是 480x480 而结果是 720。

我仔细检查了我正在使用的图像分辨率,我还使用 Photoshop 再次调整了图像的大小,它是 480 x 480。但 bDialBg.getWidth() 的结果仍然是 720。

几天前我遇到了同样的问题。

解决方案 将图像资源放在 "drawable-nodpi" 而不是任何其他 "drawable" 资源目录下。它解决了我的问题。

解释: 主要问题是,我将图像资源放在 "drawable" 目录下,它给了我错误的位图宽度信息。有趣的是,当我使用 320x320 模拟器时它给了我 720,而当我使用 480 x 480 模拟器时它给了我 1080。

希望该解决方案对您有用。