刚刚在做点击缩放的效果,虽然5、6年前就已经实现过一版了,但是技术的迭代更新,实现方案也进化了,相比之前(自定义View,不同类型的系统组件都要封装一次)简洁太多了,所以拿出来和大家分享下。
效果
TextView、Button、LinearLayout等等所有View的子类,都可以兼容。
addClickScale.gif
代码
关键部分
/**
* 添加点击缩放效果
*/
fun View.addClickScale(scale: Float = 0.9f, duration: Long = 150) {
this.setOnTouchListener { _, event ->
when (event.action) {
MotionEvent.ACTION_DOWN -> {
this.animate().scaleX(scale).scaleY(scale).setDuration(duration).start()
}
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
this.animate().scaleX(1f).scaleY(1f).setDuration(duration).start()
}
}
// 点击事件处理,交给View自身
this.onTouchEvent(event)
}
}
使用
btn.addClickScale()
方案解析
- 监听OnTouchListener ,然后回调OnClickListener,这样满足了大部分场景下的需求。
- 由于使用了Kotlin的拓展函数,极大地减少了太多代码,支持所有类型的View。想象下,若是使用Java实现,则需要非常多的代码去封装各种类型的View,代码非常冗余。
Kotlin真香!
网友评论