代码
private static scaleBitmapToContainScreen(bitmap: Bitmap, screenMetrics: DisplayMetrics): Bitmap {
const wallpaperScale: number = bitmap.getHeight() / bitmap.getWidth();
const screenScale: number = screenMetrics.heightPixels / screenMetrics.widthPixels
let targetWidth: number;
let targetHeight: number;
if (wallpaperScale < screenScale) {
targetHeight = screenMetrics.heightPixels;
targetWidth = targetHeight / wallpaperScale;
} else {
targetWidth = screenMetrics.widthPixels;
targetHeight = targetWidth * wallpaperScale;
}
return Bitmap.createScaledBitmap(bitmap, targetWidth , targetHeight, true);
}
报错提示
error: Type mismatch: inferred type is Number but Int was expected
17:34:30.023 at uni_modules/jn-wallpaper/utssdk/app-android/Util.uts:49:63
17:34:30.033 47 | targetHeight = targetWidth * wallpaperScale;
17:34:30.043 48 | }
17:34:30.054 49 | return Bitmap.createScaledBitmap(bitmap, targetWidth , targetHeight, true);
17:34:30.064 | ^
17:34:30.074 50 | }
2 个回复
最佳回复
检藏 (作者)
uts调用android原生api时, 类型错误及解决方法
1.uts数字类型只有number类型,但在声明变量时也可以用Kotlin的基本类型,如Int、Double。
2.uts 在做加减乘除运算时,类型如何强制转换
let a: Int = 3
let b: Int = 4
let c: Double = a/ b as Double 会提示warning: This cast can never succeed 改为
let c: Double = a * 1.0 / b
let d: Int = c as Double 会提示warning: This cast can never succeed 改为
let d: Int = c.toInt() HBuilder X会有红色提示,不用管它
3.调用android原生api,传参类型在uts基本类型中没有时,可用Kotlin的基本类型。
DCloud_Android_DQQ
1 可以把number 改成Int, 编辑器可能会告警,但是可以正常编译运行
关于类似场景的原则参考这个文档
https://uniapp.dcloud.net.cn/plugin/uts-for-android.html#_2-3-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%B7%AE%E5%BC%82
jiakaobang
为什么我在前面提交的问题没有人回复我啊,感觉也不是个特别难的问题,辛苦帮忙看一下
2022-11-11 10:42
DCloud_Android_DQQ
回复 jiakaobang: 什么问题?
2022-11-11 10:49
jiakaobang
回复 DCloud_Android_DQQ: ios端开屏广告底部只显示logo+名称,不管如何设置,既不会显示启动图底部15%区域,manifest里面自定义ads也不生效
2022-11-11 10:57
jiakaobang
回复 DCloud_Android_DQQ: 我真就不明白了,遇到关于uniad的问题,一点儿回复都没有。qq群加不上,商务邮件不回。这样搞的人挺没信心的,我就是想要个答复。是不是文档上说的底部自定义现在不行了。如果是的,我使用别的方案,我感觉这真的很简单一个事情啊,如果你认识负责这块的,帮忙问一下,非常感谢
2022-11-11 11:10
检藏 (作者)
我将number 改为Int 后,出现的问题是我在代码中会使用除法 得到的值会是Double 类型,如果强制用Int 小数点后面的数会去掉,计算值就会有问题。我改为Double 类型后,又提示错误
error: Type mismatch: inferred type is Double but Int was expected
12:06:44.910 at uni_modules/jn-wallpaper/utssdk/app-android/Util.uts:48:17
12:06:44.927 46 | if (wallpaperScale < screenScale) {
12:06:44.928 47 | targetHeight = screenMetrics.heightPixels;
12:06:44.943 48 | targetWidth = targetHeight / wallpaperScale;
12:06:44.954 | ^
12:06:44.966 49 | } else {
12:06:44.977 50 | targetWidth = screenMetrics.widthPixels;
12:06:44.989 error: Type mismatch: inferred type is Double but Int was expected
12:06:45.000 at uni_modules/jn-wallpaper/utssdk/app-android/Util.uts:51:18
12:06:45.011 49 | } else {
12:06:45.023 50 | targetWidth = screenMetrics.widthPixels;
12:06:45.034 51 | targetHeight = targetWidth * wallpaperScale;
12:06:45.044 | ^
12:06:45.045 52 | }
12:06:45.055 53 | console.log("测试2",targetWidth);
12:06:45.066 项目 'jc' 编译成功。
2022-11-11 12:09
检藏 (作者)
有没有将Double 类型强制转换为Int的 。我看了uts 文档没有看到类型强制转换 的用法
2022-11-11 12:14
DCloud_Android_DQQ
回复 jiakaobang: 收到。 我转发一下,应该是帖子太多会有漏的
2022-11-11 12:17
DCloud_Android_DQQ
回复 检藏: 你私信我QQ把。 我看一下什么情况
2022-11-11 12:18
jiakaobang
回复 DCloud_Android_DQQ: 谢谢,已经有你的同事联系我了,已经确定是bug了。
2022-11-11 12:20