Android Layout Animation не будет работать - PullRequest
1 голос
/ 27 апреля 2011

У меня есть LinearLayout (LayoutContentView), который может содержать один или два представления (SubView1 и SubView2) (они либо TextView, либо ImageView).Это layout находится в другом LinearLayout (MyScreenLayout).

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

Оба этих макета имеют setClipChildren(false);, поэтому он может позволить своим детям рисовать вне себя.

В зависимости от различных параметров, я могу изменить размер контента и размер контентаЯ покажу.

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

Вот мой метод для увеличения и увеличения LayoutContentView:

mLayoutContentView.clearAnimation();

float yFrom = 0.0F;
float yTo = 0.0F;
float xFrom = 0.0F;
float xTo = 0.0F;

if (expend) { // if we expend
    // I change the height of my LayoutContentView so it we can show it's two subviews
    final android.view.ViewGroup.LayoutParams lp = mLayoutContentView.getLayoutParams();
    lp.height = subView1H + subView2H;
    setLayoutParams(lp);
    invalidate(); 

    // we start the animation so it shows only the second subview
    yFrom = -subView1H;
    // and we animate from top to bottom until it shows the two subviews
    yTo = 0;
} else { // if we un-expend
    // we animate from bottom to top starting by showing the two subviews
    yFrom = 0;
    // and progressively hiding the first subview and showing only the second subview
    yTo = -subView1H;
}

Animation anim = new TranslateAnimation(xFrom, xTo, yFrom, yTo);
anim.setDuration(1000);
anim.setFillAfter(true);
anim.setFillEnabled(true);
anim.setAnimationListener(new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        if (!expend) {
            // if we un expend at the end of the animation we can set the size of LayoutContentView to the size of the second subview again
            final android.view.ViewGroup.LayoutParams lp = mLayoutContentView.getLayoutParams();
            lp.height = subView2H;
            mLayoutContentView.setLayoutParams(lp);
            invalidate();
        }
    }
});

mLayoutContentView.startAnimation(anim);

Способ, которым я сделал свою анимацию, мне нужно применить к LayoutContentView, макет, который содержит два подпредставления, и с startAnimation() он не выполняет анимацию.Я пытался использовать LayoutAnimationController, но вместо анимации на LayoutContentView он делает это для каждого из своих детей ... Я также пытался сделать анимацию для каждого ребенка самостоятельно, но я не знаю,почему второе подпредставление не отображается.

Каждый раз, когда я пытался использовать HierarchyViewer, но оно видит изменения, сделанные анимацией.

Кто-нибудь знает решениеили столкнулись с той же проблемой и нашли хорошее решение?

EDIT : Ну, кажется, что если вы установите background цвет для вашего TextView и переместите их с анимацией,background двигаться, но даже если вы установили параметр fill after для вашей анимации, фон возвращается в исходное положение или что-то в этом роде, и поэтому, когда я установил цвет фона для обоих моих SubView s, в некоторой степенифона SubView скрыть фон другого ... И есть проблема, если после анимации один из SubView все еще находится за пределами своего макета, во время анимации также возникает проблема, поэтомуЯ объявлениеd Ограничение тому, что я намеревался и здесь.

...