Android中实现ImageView上下移动动画的方法求助
实现ImageView上下移动动画的两种方法
嘿,我完全懂你找不到上下移动教程的困扰——很多入门资源都先聚焦左右移动,但其实动画的核心逻辑是相通的!先帮你梳理现有代码的问题,再给出上下移动的实现方案,还会推荐更现代的属性动画方式哦。
一、用TranslateAnimation(补间动画)实现上下移动
你现有的左右移动代码参数可能没写全,先回顾下TranslateAnimation的核心完整构造:
TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)
参数里的Type代表坐标参考系:
Animation.ABSOLUTE:以像素为绝对单位Animation.RELATIVE_TO_SELF:相对于View自身尺寸的比例(0.0是左/上边缘,1.0是右/下边缘)Animation.RELATIVE_TO_PARENT:相对于父布局尺寸的比例
要实现上下移动,只需保持X轴坐标不变,修改Y轴的起始和结束值:
示例1:向下移动150像素
// 创建向下移动的动画:X轴保持原位置,Y轴从初始位置向下移动150px TranslateAnimation moveDownAnim = new TranslateAnimation( Animation.ABSOLUTE, 0, // X轴起始位置:绝对像素0(原位置) Animation.ABSOLUTE, 0, // X轴结束位置:绝对像素0(无变化) Animation.ABSOLUTE, 0, // Y轴起始位置:绝对像素0(原位置) Animation.ABSOLUTE, 150 // Y轴结束位置:绝对像素150(向下移动150px) ); moveDownAnim.setDuration(3000); // 动画时长3秒 moveDownAnim.setFillAfter(true); // 动画结束后保持最终状态 imga.startAnimation(moveDownAnim); // 启动动画
示例2:向上移动150像素
只需把Y轴的结束值改为负数即可:
TranslateAnimation moveUpAnim = new TranslateAnimation( Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -150 // 向上移动150px ); moveUpAnim.setDuration(3000); moveUpAnim.setFillAfter(true); imga.startAnimation(moveUpAnim);
二、推荐:用ObjectAnimator(属性动画)实现上下移动
补间动画只是改变View的视觉位置,真实点击区域仍在原位置。如果需要动画后View的交互位置同步更新,推荐用属性动画(Android 3.0+支持):
向下移动示例
// 直接修改View的translationY属性:从0移动到150px(向下) ObjectAnimator moveDownAnimator = ObjectAnimator.ofFloat(imga, "translationY", 0f, 150f); moveDownAnimator.setDuration(3000); moveDownAnimator.start();
向上移动示例
// 修改translationY属性:从0移动到-150px(向上) ObjectAnimator moveUpAnimator = ObjectAnimator.ofFloat(imga, "translationY", 0f, -150f); moveUpAnimator.setDuration(3000); moveUpAnimator.start();
属性动画会直接更新View的真实属性,动画结束后点击等交互会正常生效,这也是官方更推荐的现代动画方案。
内容的提问来源于stack exchange,提问作者Deb Prakash Chatterjee
相关产品推荐
相关产品推荐

