我创建了自己的扩展功能,检查sdk是否至少是lollipop
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()
}
请注意,我需要lint抑制器,以避免lint警告
答案 0 :(得分:0)
看起来lint
不知道如何扩展内联Kotlin变量。我没有检查它是否扩展为Java。稍后会这样做。
还注意到......
if(!(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)) return
val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)
...不会压制lint。但...
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)
...意愿。同样,我没有检查Java是否也是如此。
所以,我怀疑这是一个Kotlin / Java问题。我认为这是一个皮棉问题。