哪有免费做网站,百度可信网站,anything popup wordpress 插件怎么使用,电子商务网站建设内容最近需求一个问题#xff0c;想要在dialog消失时增加动画#xff0c;之前如上一个文章中遇到的#xff0c;但是最后改了实现方式#xff0c;要求在特定的地方缩放#xff0c;原来的dialog高度是wrap_content的#xff0c;这样是无法实现的#xff0c;因此首先需要将dial…最近需求一个问题想要在dialog消失时增加动画之前如上一个文章中遇到的但是最后改了实现方式要求在特定的地方缩放原来的dialog高度是wrap_content的这样是无法实现的因此首先需要将dialog的layout文件从wrap_content改成match_parent同时设置最外层布局背景透明。在dialog.show()之后重新设置窗口属性
RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:gravitycenterandroid:clipChildrenfalseandroid:layoutDirectionltr此处省略内部内容/RelativeLayoutdialog?.show()dialog?.apply {window?.setLayout(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT)}
紧接着我们就可以使用动画了尤其是平移动画原来dialog是wrap_content的时候如何平移超过view就会消失。当dialog变成match_parent后就可以正常使用平移动画了。
思路根据位置计算平移的距离进行平移同时缩放 private fun setAnim(dialog: Dialog) {dialog.apply {val animView findViewByIdView(R.id.limited_layout)val height animView?.height//此处是在计算相应的距离等内容val retainHeight (screenHeight(context) - height!!) / 2 - DensityUtil.dp2px(ApplicationHelper.getInstance().context,84f) - getStatusBarHeight(context)val topHeight DensityUtil.dp2px(ApplicationHelper.getInstance().context,80f)val transHeight retainHeight - topHeight - DensityUtil.dp2px(ApplicationHelper.getInstance().context,28f).toFloat()val scaleAnimation if (retainHeight topHeight) {ScaleAnimation(1f, 0f,1f, 0f,Animation.RELATIVE_TO_SELF, 1f,Animation.RELATIVE_TO_SELF,((topHeight DensityUtil.dp2px(ApplicationHelper.getInstance().context,28f) - retainHeight) / height.toFloat()))} else {ScaleAnimation(1f, 0f,1f, 0f,Animation.RELATIVE_TO_SELF, 1f,Animation.RELATIVE_TO_SELF, 0f)}val translationAnimator if (retainHeight topHeight) {TranslateAnimation(0f,0f,0f,-transHeight)} else {null}translationAnimator?.let {val animationSet AnimationSet(true)scaleAnimation.duration 300animationSet.addAnimation(scaleAnimation)val alphaAnimation AlphaAnimation(1f, 0f)alphaAnimation.duration 300it.duration 300animationSet.addAnimation(it)animationSet.addAnimation(alphaAnimation)animView.startAnimation(animationSet)animationSet.setAnimationListener(object : Animation.AnimationListener {override fun onAnimationStart(animation: Animation?) {// 动画开始时的操作}override fun onAnimationEnd(animation: Animation?) {mLimitedDialog?.let { dismiss() }}override fun onAnimationRepeat(animation: Animation?) {// 动画重复时的操作}})} ?: run {val animationSet AnimationSet(true)scaleAnimation.duration 300animationSet.addAnimation(scaleAnimation)val alphaAnimation AlphaAnimation(1f, 0f)alphaAnimation.duration 300animationSet.addAnimation(alphaAnimation)animView.startAnimation(animationSet)animationSet.setAnimationListener(object : Animation.AnimationListener {override fun onAnimationStart(animation: Animation?) {// 动画开始时的操作}override fun onAnimationEnd(animation: Animation?) {mLimitedDialog?.let { dismiss() }}override fun onAnimationRepeat(animation: Animation?) {}})}}}