Сохранить вид над анимацией другого вида - PullRequest
2 голосов
/ 04 августа 2011

У меня есть Activity с основным экраном, который просто имеет строку заголовка (среди прочего). У меня есть еще один TextView под строкой заголовка, который я анимирую сверху вниз на место (он начинается как View.GONE, затем я анимирую его видимым и на место после события от пользователя).

Это прекрасно работает, но TextView под строкой заголовка анимирует над строкой заголовка на место. Я хочу, чтобы это выглядело так, как будто TextView взято из под строки заголовка. Оба представления находятся в LinearLayout, поэтому я не могу обратиться к z-порядку, как в FrameLayout. Есть предложения?

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Я в конечном итоге решил эту проблему, включив текстовое представление в LinearLayout, а затем установив LayoutAnimationController в LinearLayout.Это приводит к тому, что все дочерние элементы должны быть анимированы относительно родительского контейнера, что делает раскрывающийся список только для визуализации в LinearLayout (который работал отлично).Вот код, который я использовал для контроллера анимации и ListView:

private void addDeleteDropAnimation() {
    AnimationSet set = new AnimationSet(true);

    Animation animation = new AlphaAnimation(0.0f, 1.0f);
    animation.setDuration(150);
    set.addAnimation(animation);

    animation = new TranslateAnimation(
        Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f,
        Animation.RELATIVE_TO_SELF, -1.0f,Animation.RELATIVE_TO_SELF, 0.0f
    );
    animation.setDuration(300);
    set.addAnimation(animation);

    controllerDel = new LayoutAnimationController(set, 0.5f);
    vw_delLinearLayout.setLayoutAnimation(controllerDel);
}
0 голосов
/ 04 августа 2011
Handler handler = new Handler();
new Thread(){
    public void run(){
        TextView tv = (TextView)findViewById(R.id.xx);
        LayoutParams params = (LayoutParams)tv.getLayoutParams();
        handler.post(new Runnable(){
            public void run(){            
                tv.setVisible(View.Visible);
            }
        }
        int height = params.height;
        for(int i = 0; i < height + 1; i++) {
            params.topMargin = i - height;
            handler.post(new Runnable(){
                public void run(){            
                   tv.requestLayout();
                }
            }

            try{
                Thread.sleep(5);
            }catch(InterruptedException e){
            }
        }

    }
}.start();

Вы можете попробовать это.

...