Android购物动画

最近在做一个类似于购物的动画。先上最终的效果的Demo。

从图中可以看出,是可以在一个动画还没有结束的时候开始第二个动画,即多个动画会依次执行。自己做的动画并不多,所以就说的详细一点(如果有说错的的还望告诉一下啊,哈哈)
1.一个View只能在自身的父布局中移动。最开始,将这个效果放在ListView中的时候,发现根本不移动,当时移动的是ListView的某个Item中的一个TextView,并且我也没有单独的new一个图层来执行动画。
2.怎么才能让View的动画会多个依次的去执行。最开始,做的时候是在每次执行动画之前创建一个View,然后在每次监听动画结束的时候去remove这个View,然后出现的结果是每当界面出现两个View的时候就会crash。那什么会让动画依次执行呢?先进先出,队列,最后用的是Handler。
3.多种动画同时存在的时候,比如ScaleAnimation和TranslateAnimation,加在AnimationSet中的时候会发现计算的位置不正确。这个是因为ScaleAnimation以后位置会出现一些变化。两种解决方案。
(1) AnimationSet将ScaleAnimation放在第一个。
(2)new Animation的时候设置他的type,Animation.RELATIVE_TO_SELF。
动画的类。

public void startBuyAnim(final View view)
    {
        int start_location[] = new int[2];
        view.getLocationInWindow(start_location);

        ImageView startView = new ImageView(context);
        startView.setBackgroundColor(Color.RED);
        startView.setLayoutParams(new LayoutParams(context.getResources().getDimensionPixelSize(R.dimen.red_point_size),
                context.getResources().getDimensionPixelSize(R.dimen.red_point_size)));

        Item item = new Item();
        item.view = startView;
        viewHolder.add(item);
        animLayout.addView(startView);

        // 目的位子
        int endX = MainActivity.END_LOCATION[0];
        int endY = MainActivity.END_LOCATION[1];

        TranslateAnimation translateAnimationX = new TranslateAnimation(start_location[0], endX, 0.0f, 0.0f);
        translateAnimationX.setInterpolator(new LinearInterpolator());
        translateAnimationX.setRepeatCount(0);
        translateAnimationX.setFillAfter(true);
        TranslateAnimation translateAnimationY = new TranslateAnimation(0.0f, 0.0f, start_location[1], endY);
        translateAnimationY.setInterpolator(new Interpolator()
        {
            @Override
            public float getInterpolation(float input)
            {
                return ((1.5f * (input - 0.16666667f)) * (input - 0.16666667f)) - 0.041666668f;
            }
        });
        translateAnimationY.setRepeatCount(0);
        translateAnimationX.setFillAfter(true);
        // ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.05f, 1,
        // 0.05f, Animation.RELATIVE_TO_SELF, 0,
        // Animation.RELATIVE_TO_SELF, 0);
        // scaleAnimation.setRepeatCount(0);
        // scaleAnimation.setFillAfter(true);
        AnimationSet set = new AnimationSet(false);
        set.setFillAfter(false);
        // set.addAnimation(scaleAnimation);
        set.addAnimation(translateAnimationX);
        set.addAnimation(translateAnimationY);
        set.setDuration(600);
        startView.startAnimation(set);
        set.setAnimationListener(new AnimationListener()
        {

            @Override
            public void onAnimationStart(Animation animation)
            {
            }

            @Override
            public void onAnimationRepeat(Animation animation)
            {
            }

            @Override
            public void onAnimationEnd(Animation animation)
            {
                AnimUtil.this.handler.post(new Runnable()
                {

                    @Override
                    public void run()
                    {
                        AnimUtil.this.removeView();
                    }
                });
            }
        });
    }

    private List<Item> viewHolder;

    private class Item
    {
        public View view;

        private Item()
        {
        }
    }

    private void removeView()
    {
        if (this.viewHolder != null && this.viewHolder.size() > 0)
        {
            Item item0 = this.viewHolder.get(0);
            item0.view.setVisibility(View.GONE);
            this.viewHolder.remove(item0);
            this.animLayout.removeView(item0.view);
        }
    }
}


下载链接:http://download.csdn.net/detail/a38017032/9424067


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值