2013-06-25 6 views
0

У меня есть LinearLayout (называемый макет) с высотой, как fill_parent, и начальное верхнее поле 200dp внутри RelativeLayout. Когда я нажал кнопку, я хочу, чтобы topMargin стал 0, расширяя LinearLayout. Я использую следующий код:Создать Android анимацию мягко

 final RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.FILL_PARENT, 
       RelativeLayout.LayoutParams.FILL_PARENT); 

    Animation animation = new Animation() { 
       @Override 
       protected void applyTransformation(float interpolatedTime, 
         Transformation t) { 
         int topMargin = (int)((1-interpolatedTime)*200); 
         layoutParams.setMargins(0, topMargin, 0, 0); 
         layout.setLayoutParams(layoutParams); 
         LogThis.debug("topMargin: "+topMargin); 
       } 
    }; 
    animation.setDuration(1000); 
    layout.startAnimation(animation); 

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

Есть ли у вас какие-либо идеи, как сделать такое преобразование мягко?

Заранее спасибо.

EDIT

У меня это в первый момент:

enter image description here

И после анимации я хочу это:

enter image description here

С TranslationAnimation я получаю это:

enter image description here

ответ

1

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

Но поскольку вы используете простой перевод можно легко добиться того, что с помощью TranslateAnimation как на этом ответ:

translate animation

+0

Это перемещает макет мягко, но это не OCUPY всего пространства. Мне нужно, чтобы он увеличивался (измените размер макета, а не изображения внутри него). – user1448668