Сложная анимация просмотра в Android

В моем приложении для Android я хочу показать анимацию, чтобы вид выскочил из своей позиции.

Более подробно я хочу добиться чего-то вроде этого -

  • При нажатии View (это может быть любой тип View, скажем, ImageView) он переместится к верхней части экрана.
  • Через определенное расстояние он снова переместится в центр экрана с небольшим увеличением.

Я немного знаю о классе Animation, Animation Listener и AnimationSet в Android. но все еще ищет руководство для достижения этой функциональности

Не могли бы вы предложить способ достижения этого?

Отредактированная часть -

Основная проблема заключается в получении правильных координат вида после его перемещения вверх, а следующая проблема - привести этот вид в центр экрана из последней позиции.


person silwar    schedule 20.04.2012    source источник
comment
Я думаю, вам нужен зум в анимации, это то, что вы хотите?   -  person Hardik4560    schedule 20.04.2012
comment
Думаю только зум не подойдет. Мне нужен набор анимаций, в которых вид будет двигаться вверх, а затем перемещаться и останавливаться в центре экрана.   -  person silwar    schedule 20.04.2012


Ответы (2)


следующий код будет иметь анимацию, которая будет двигаться вниз и доходить до середины с эффектом масштабирования


    @Override
    public void onClick(final View view) {
        TranslateAnimation translateAnimation1 = new TranslateAnimation(
                TranslateAnimation.RELATIVE_TO_PARENT,
                0.0f,
                TranslateAnimation.RELATIVE_TO_PARENT,
                0.8f,
                TranslateAnimation.RELATIVE_TO_PARENT,
                0.0f,
                TranslateAnimation.RELATIVE_TO_PARENT,
                0.8f);
        translateAnimation1.setDuration(1000);
        translateAnimation1.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation arg0) {}
            @Override
            public void onAnimationRepeat(Animation arg0) {}
            @Override
            public void onAnimationEnd(Animation arg0) {
                TranslateAnimation translateAnimation2 = new TranslateAnimation(
                        TranslateAnimation.RELATIVE_TO_PARENT,
                        0.8f,
                        TranslateAnimation.RELATIVE_TO_PARENT,
                        0.5f,
                        TranslateAnimation.RELATIVE_TO_PARENT,
                        0.8f,
                        TranslateAnimation.RELATIVE_TO_PARENT,
                        0.5f);
                translateAnimation2.setDuration(1000);
                AnimationSet animationSet = new AnimationSet(false);
                ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 2.0f,1.0f,2.0f,ScaleAnimation.RELATIVE_TO_SELF ,0.5f,ScaleAnimation.RELATIVE_TO_SELF,0.5f);
                scaleAnimation.setDuration(1000);
                animationSet.addAnimation(scaleAnimation);
                animationSet.addAnimation(translateAnimation2);
                view.startAnimation(animationSet);

            }
        });
        view.startAnimation(translateAnimation1);
    }

person Sudar Nimalan    schedule 20.04.2012

Попробуй это,

ScaleAnimation animScale = new ScaleAnimation(0, 2, 0, 5);
animScale.setDuration(2000);
AnimationSet animation = new AnimationSet(false);
animation.addAnimation(animScale);
view.startAnimation(animation);

Измените значения в конструкторе ScaleAnimation, чтобы получить требуемый результат.

person Hardik4560    schedule 20.04.2012
comment
Привет, Хардик, спасибо за быстрый ответ .. код, который вы указали, отлично работает для масштабирования .. но, пожалуйста, посмотрите отредактированную часть поста .. чтобы вы лучше поняли проблему .. - person silwar; 20.04.2012
comment
Посмотрите, приведенный выше ответ, данный Sudar, отлично работает, это должно быть то, что вы хотели. - person Hardik4560; 20.04.2012