【发布时间】:2017-07-22 21:24:43
【问题描述】:
我创建了自己的扩展函数来检查 sdk 是否至少是棒棒糖
inline val buildIsLollipopAndUp: Boolean
get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
但是,如果我使用它,lint 工具无法确定我已经验证了我的 api 级别并且仍然给我新的 api 警告。有没有办法让这些警告消失并让 lint 工具识别我的支票?
一个简单的例子:
if (buildIsLollipopAndUp) ripple()
else fade()
ripple 调用仅适用于棒棒糖及以上的循环动画,fade 是默认动画。
我的full example:
@SuppressLint("NewApi")
@KauUtils fun View.circularReveal(x: Int = 0, y: Int = 0, offset: Long = 0L, radius: Float = -1.0f, duration: Long = 500L, onStart: (() -> Unit)? = null, onFinish: (() -> Unit)? = null) {
if (!isAttachedToWindow) {
onStart?.invoke()
visible()
onFinish?.invoke()
return
}
if (!buildIsLollipopAndUp) return fadeIn(offset, duration, onStart, onFinish)
val r = if (radius >= 0) radius
else Math.max(Math.hypot(x.toDouble(), y.toDouble()), Math.hypot((width - x.toDouble()), (height - y.toDouble()))).toFloat()
val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)
anim.startDelay = offset
anim.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator?) {
visible()
onStart?.invoke()
}
override fun onAnimationEnd(animation: Animator?) = onFinish?.invoke() ?: Unit
override fun onAnimationCancel(animation: Animator?) = onFinish?.invoke() ?: Unit
})
anim.start()
}
请注意,我需要棉绒抑制器以避免棉绒警告
【问题讨论】:
-
它不是函数,也不是扩展函数。它实际上是一个带有
getter的属性。你能展示一下你是如何使用它的代码吗? -
@Les 哎呀我的错误。我把它放在一个带有我的扩展名的文件中,但我忘记了这不算作一个。我添加了一个示例用法,但它与将
Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP替换为buildIsLollipopAndUp基本相同
标签: android kotlin android-lint