Первый раз View.getHeight получает «0» только после окончания анимации. Я получаю высоту, почему? - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть анимация для просмотра Slide вверх и вниз в Activity, я использую приведенный ниже код.В первый раз я получаю rlView высоту как «0», как только анимация заканчивается, только я получаю правильную высоту

private void animateView() {
        Log.d(TAG, "animateView: height" + markLocationBinding.rlView.getHeight());
        if (markLocationBinding.ivHurray.getVisibility() == View.GONE) {
            markLocationBinding.ivHurray.setVisibility(View.VISIBLE);
            Log.d(TAG, "animateView: inside height" + markLocationBinding.rlView.getHeight());
            markLocationBinding.ivHurray.animate()
                    .translationY(markLocationBinding.rlView.getHeight())
                    .alpha(1.0f)
                    .setListener(new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            super.onAnimationEnd(animation);
                            Log.d(TAG, "animateView: inside height end" + markLocationBinding.rlView.getHeight());
                        }
                    });
        } else {
            markLocationBinding.ivHurray.animate()
                    .translationY(0)
                    .alpha(0f)
                    .setListener(new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            super.onAnimationEnd(animation);
                            markLocationBinding.ivHurray.setVisibility(View.GONE);

                        }
                    });
        }
    }

Мой макет

 <RelativeLayout
            android:id="@+id/ivHurray"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="-450dp"
            android:background="#bb000000"
            android:clickable="true"
            android:orientation="vertical"
            android:visibility="gone">

            <RelativeLayout
                android:id="@+id/rlView"
                android:layout_width="match_parent"
                android:layout_height="450dp">

                <LinearLayout
                    android:id="@+id/llText"
                    android:layout_width="match_parent"
                    android:layout_height="130dp"
                    android:layout_below="@+id/ivMan"
                    android:layout_marginTop="-30dp"
                    android:background="#94aea1"
                    android:gravity="bottom"
                    android:orientation="vertical"
                    android:paddingBottom="15dp">

                    <TextView
                        android:id="@+id/tvHurray"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:padding="8dp"
                        android:text="@string/hurray"
                        android:textColor="@color/white"
                        android:textSize="22dp"
                        android:textStyle="bold" />

                    <TextView
                        android:id="@+id/tvHurraySub"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:padding="5dp"
                        android:text="@string/geo_marked_loc"
                        android:textColor="@color/white"
                        android:textSize="18dp" />
                </LinearLayout>
      <ImageView
                android:id="@+id/ivMan"
                android:layout_width="match_parent"
                android:layout_height="320dp"
                android:background="@drawable/hurray_image"
                android:scaleType="center" />

            </RelativeLayout>

//some other views           
        </RelativeLayout>

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Вы можете получить измеренную высоту и ширину, как показано ниже:

view.measure(0,0);
int width=view.getMeasuredWidth(); 
int height=view.getMeasuredHeight();
0 голосов
/ 04 февраля 2019

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

markLocationBinding.rlView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            //Need to remove the layout listener otherwise animateView() will be called every time view updates
            rlView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            animateView();
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...