alpha 渐变透明动画效果
scale 渐变尺寸伸缩动画效果
translate 画面转换位置移动动画效果
rotate 画面转移旋转动画效果
Animation是所有动画《scale、alpha、rotate、translate》的基类,这里已scale为例,讲解下Animation所有属性及意义
android:duration 动画持续时间,以毫秒为单位
android:fillAfter 如果设置为true,控件动画结束时,保持动画最后时的状态
android:fillBefore 如果设置为true,控件动画结束时,还原到动画开始前的状态
android:fillEnabled 与android:fillBefore 效果相同
android:repeatCount 重复次数 如果设置为infinite,则表示无限次重复动画
android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒叙回放,restart表示重新播放一遍,必须与android:repeatCount一起使用才有效果,因为这里的意义是重复类型,即回放的动作
android:interpolator 插值器,指定动作的效果,比如弹跳,快速等
Scale是Android的尺寸缩放动画,继承自基类Animation
Scale的属性
直接参照代码中的注释(ps:方便说明,直接使用#作为注释符)
android:fromAlpha 动画开始的透明度,取值范围0.0-1.0,0.0表示完全透明,1.0表示完全不透明
android:toAlpha 动画结束的透明度,取值范围0.0-1.0
android:fromDegrees 开始旋转的角度位置,正值表示顺时针方向的度数,负值表示逆时针方向的度数
android:toDegrees 结束旋转的角度位置,正值表示顺时针方向的度数,负值表示逆时针方向的度数
android:pivotX 旋转中心点X轴坐标,可以是数值,百分数,百分数p三种样式,比如50,50%,50%p;具体意义已经在scale标签中讲述,这里就不一 一作解释了
android:pivotY 旋转中心点Y轴坐标,意义同上
android:fromXDelta 起始点X轴坐标,可以是数值,百分数,百分数p三种样式,比如50,50%,50%p;具体意义已经在scale标签中讲述,这里就不作解释了
android:fromYDelta 起始点Y轴坐标,意义同上
android:toXDelta 结束点X轴坐标
android:toYDelta 结束点Y轴坐标
简单来说假如我想要的动画需要平移 旋转 透明度变化 缩放 那么在xml外层就需要使用set
注意:如果使用到Set标签
在Set标签中设置android:repeatCount是无效的,只能在子动画中重复次数才有效果。如果没有设置则默认为1次。如下图一
对于android:duration和android:repeatMode则优先使用Set标签中设置的属性,如果Set标签中没有设置就使用子控件中的(Set没有设置动画时长,子动画一定要设置时长)。如下图一二
android:fillAfter、android:fillBefore、android:fillEnabled属性只能在Set标签中设置,如果没有设置则使用默认的android:fillBefore="true",在子动画中设置是无效的。如下图三
在外部获取动画并设置给view
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_set);
mTextView.startAnimation(animation);
如上述动画xml编写后 需要在styles.xml中编写如下内容
android:windowEnterAnimation :弹窗展示动画
android:windowExitAnimation:弹窗退出动画
View popView = LayoutInflater.from(itemView.getContext()).inflate(R.layout.item_dislike_btn, null); //布局加载器加载菜单布局
PopupWindow popup = new PopupWindow(popView, 300, 80); // 声明 设置宽高
// 设置成点击弹窗以外位置让弹窗隐藏
popup.setOutsideTouchable(true);
popup.setFocusable(true);
// 设置弹窗动画
// 注意: 必须在showAsDropDown方法前设置动画 否则不生效
popup.setAnimationStyle(R.style.anim_dislike_btn);
// 设置弹窗弹出 并设置位置
popup.showAsDropDown(moreButton, -230, -65, Gravity.CENTER);