位图在 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。
希望该解决方案对您有用。
我使用的位图分辨率是 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。
希望该解决方案对您有用。