Анимация TextViews внутри LinearLayout - PullRequest
0 голосов
/ 14 октября 2019

Я хочу анимировать TextViews внутри LinearLayout. Я хочу, чтобы они двигались вверх каждые несколько секунд. Если они двигаются вверх, последний элемент должен некоторое время оставаться пустым, а затем там должен показываться первый сверху. У меня будет список слов, которые будут раздуты там.


 private void startAnimation() {

        float end;
        try {
            end = linearLayout.getTranslationY() -   getResources().getDimensionPixelSize(R.dimen.distance);
        } catch (NullPointerException e) {
            e.printStackTrace();
            end = - getResources().getDimensionPixelSize((R.dimen.distance));
        }

        ObjectAnimator animation1 = ObjectAnimator.ofFloat(linearLayout,
                                              "translationY",
                                                           end);
        animation1.setDuration(2000);
        animation1.start();
        animation1.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animator) {

            }

            @Override
            public void onAnimationEnd(Animator animator) {

            }

            @Override
            public void onAnimationCancel(Animator animator) {

            }

            @Override
            public void onAnimationRepeat(Animator animator) {

            }
        });

}

Я думал, что решение находится внутри метода OnAnimationEnd. Я создал это (родительский элемент моего Linear Layout - Frame Layout):

            @Override
            public void onAnimationEnd(Animator animator) {

                translationsLayout.removeView(translatedWord1);
                translationsLayout.addView(translatedWord1);

                FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
                        FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);

                layoutParams.setMargins(getResources().getDimensionPixelSize(R.dimen.marginLeft),
                        getResources().getDimensionPixelSize(R.dimen.marginTop),
                        0,
                        0);
                translationsLayout.setLayoutParams(layoutParams);
}

К сожалению, он не дает ожидаемого результата. TextViews выходят за пределы линейного макета и исчезают. Я думал, что если я удалю первый элемент LinearLayout с помощью метода .removeView(View v), а позже я буду использовать .addView(View v), в результате первый элемент Linear Layout добавит один элемент внизу. Однако кажется, что этот первый элемент, даже если он не виден, все еще существует в Linear Layout, и если я удаляю первый и добавляю, он просто переключается с последним элементом в макете.

...