2017-07-22 2 views
1

J'ai créé ma propre fonction d'extension qui vérifie si le sdk est au moins lollipopUtiliser la propriété NewApi provoque toujours des avertissements charpie

inline val buildIsLollipopAndUp: Boolean 
    get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP 

Cependant, si je l'utiliser, les outils de peluches ne peut pas comprendre que je J'ai vérifié mon niveau d'api et me donne toujours de nouveaux avertissements api. Est-il possible de faire disparaître ces avertissements et de faire reconnaître mon chèque par les outils de la charpie?

Un exemple simple:

if (buildIsLollipopAndUp) ripple() 
else fade() 

ripple invite l'animation circulaire qui est disponible uniquement pour les sucettes et, et fade est l'animation par défaut.

Mon 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() 
} 

Notez que j'ai besoin le dispositif de suppression de peluches afin d'éviter les avertissements de peluches

+0

ce n'est pas une fonction, et ce n'est pas non plus une fonction d'extension. C'est en fait une propriété avec un «getter». pouvez-vous montrer le code comment vous l'utilisez? – Les

+0

@Les oups mon erreur. Je l'ai eu dans un fichier avec mes extensions et j'ai oublié que cela ne compte pas comme un. J'ai ajouté un exemple d'utilisation, mais c'est fondamentalement le même que de remplacer 'Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP' par' buildIsLollipopAndUp' –

Répondre

0

Il ressemble lint ne sait pas comment étendre la variable Kotlin en ligne en place. Je n'ai pas vérifié si elle s'étend pour Java. Je le ferai plus tard.

On note également ...

if(!(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)) return 
    val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration) 

... ne supprimera pas les peluches. Mais ...

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
    val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration) 

... volonté. Encore une fois, je n'ai pas vérifié si la même chose est vraie pour Java. Donc, je doute que ce soit un problème de Kotlin/Java. Je pense que c'est un problème de charpie.