Android简单动画

        做项目的时候有一个需求,Activity的底部有一个类似抽屉的菜单,点击把手展开活着收起

/**
     * 
     * @param view    	响应动画的View
     * @param isInOrOut	是否是自下向上
     */
    public static void bottomInAnimation(final View view, final boolean isInOrOut) {
    	if (view == null) {
    		return;
    	}
    	//这里四个参数分别表示 1、动画初始时View的X坐标与实际坐标的差值
    	//2、动画结束时View的X坐标与实际坐标的差值
    	//3、动画初始时View的Y坐标与实际坐标的差值
    	//4、动画结束时View的Y坐标与实际坐标的差值
    	//如果是从底部向上话则为负值
    	final int deltaLength = isInOrOut ? -view.getHeight() : view.getHeight();;
    	Animation translateAnimation = new TranslateAnimation(0, 0, 0, deltaLength);
    	//动画持续时间
    	translateAnimation.setDuration(300);
    	//是否停留在最后一帧,配合setFillEnabled(true)来用,否则失效。
        translateAnimation.setFillAfter(true);
        translateAnimation.setFillEnabled(true);
        // 显示弹力
        translateAnimation.setInterpolator(new OvershootInterpolator(0.6f));
        translateAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
            	// 由于动画其实相当于View移动的一个快照, 真正的View坐标时没有变化的, 而我们实际项目中view移动后可能要进行一些事件
            	// 中view移动后可能要进行一些事件处理,由于坐标没有变化,即使我门点击了某些View也不会有事件响应,所以进行如下操作
            	int t = view.getTop()  + deltaLength;
            	int b = view.getBottom() + deltaLength;
            	view.layout(view.getLeft(), t, view.getRight(), b);
            	view.clearAnimation();
            	// 但是这时候我们会发现还是有些问题view移动后会发生些变化,这时候就需要我们利用view的LayoutParam设置起margin来实现我们想要的结果
            	// 比如当我们滑向底部时设置一下 比如View父View是RelativeLayout时
            	RelativeLayout.LayoutParams params = (LayoutParams) view.getLayoutParams();
            	params.bottomMargin = isInOrOut ? 0 : view.getHeight();
            }
        });
        view.startAnimation(translateAnimation);
    }

上面简单的说了一下代码的大概, 如果要实现更复杂的 比如支付宝客户端的底部栏上滑隐藏下滑显示则需要监听View的OnTouch事件监听其滑动了,如果是ListView 或者ScrollView 则在其onScroll中进行处理就好。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值