抖音几乎能够说是目前最火的闲暇时间的消遣软件,它的视频播放界面有一个评论列表界面,列表是从下至上滑动出现,并覆盖在视频的上层。点击输入框又会弹出第二层弹窗覆盖在评论列表上面。git
我录了一段动图来看看:github
你能不能看出抖音的效果有哪些不足呢?markdown
这个界面有两层弹窗,一层是评论列表,一层是输入框。能够看到抖音的输入框弹窗显示的时候是瞬间出现,没有动画;消失的时候也是瞬间消失,这样给用户一种顿挫感,界面的切换不够丝滑流畅。ide
下面看看我用50行代码实现的总体效果,可能还不到50行代码:oop
这个效果涉及到动画,手势拖拽,嵌套滚动,阴影渐变,输入法交互等技能,要想处理都优雅流畅美观,对Android的技能要求并不低的。布局
这里咱们使用XPopup类库来实现,XPopup是一个弹窗库,多是Android平台最好用的弹窗库。动画
咱们使用XPopup的Bottom弹窗来实现评论列表弹窗,并给弹窗设置一些虚拟数据。ui
所有的代码以下,布局的点就不贴了:this
//评论列表弹窗 class CommentPopup(context: Context) : BottomPopupView(context) { override fun getImplLayoutId(): Int { return R.layout.popup_comment } override fun onCreate() { super.onCreate() val list = mutableListOf<String>() (0..100).forEach { list.add("身材不错啊,美女哪里的人啊~~") } recyclerView.vertical() .bindData(list, R.layout.item_comment, bindFn = { holder, t, position -> holder.getView<TextView>(R.id.content).text = t }) btnComment.click { //弹出输入的弹窗 } } override fun getMaxHeight(): Int { return (XPopupUtils.getWindowHeight(context) * .7f).toInt() } } 复制代码
显示评论列表弹窗:spa
XPopup.Builder(this) .hasShadowBg(false) //不要半透明阴影背景 .moveUpToKeyboard(false) //不移动到输入法上面 .asCustom(CommentPopup(this)).show() 复制代码
此时你会获得这样的一个效果:
第二层的弹窗是输入框弹窗,根据效果也须要用Bottom弹窗来实现。
所有的代码以下:
class EditCommentPopup(context: Context) : BottomPopupView(context) { override fun getImplLayoutId(): Int { return R.layout.popup_comment_edit //布局 } override fun onCreate() { super.onCreate() btnSend.click {dismiss()} } fun getComment() = etContent.text } 复制代码
显示输入框弹窗:
btnComment.click { //弹出输入评论的弹窗 val editPopup = EditCommentPopup(context) XPopup.Builder(context) .setPopupCallback(object : SimpleCallback(){ override fun onDismiss() { list.add(0, editPopup.getComment().toString()) recyclerView.adapter?.notifyDataSetChanged() } }) .asCustom(editPopup).show() } 复制代码
经过上面几行代码你会获得这样的效果:
结束了,所有的代码仅仅这么多!!!并且弹窗自然和当前界面解耦分离,你能够把它用在任意界面。
Ok,这个效果只是展现了XPopup的一部分很小的功能而已,它还有很强的功能。从目前来看,我能够自信的说,XPopup能够知足你项目中几乎全部弹窗需求和效果,它在设计的时候就以实用为原则,并兼顾了美观,流畅和天然。
固然它还有一些未发现的Bug,请试着用用它,来让它变得更好。 对了,它的地址在这里:
若是用了以后以为不错,请推荐给你的朋友和同事。好东西要分享,不能吃独食啊!嘿嘿。。。