Поэтому у меня есть мнение, которое выглядит следующим образом:Animate ViewPager, чтобы заполнить экран в Android
То, что я пытаюсь добиться для всего представления сдвигаются вверх, чтобы скрыть большие изображения до вершины когда пользователь прокручивается вниз по GridView. В принципе, если они хотят видеть больше gridview, макет прокручивается, чтобы увеличить размер сетки.
Однако, когда я на самом деле сделать это, вот что происходит:
Он отлично работает, за исключением того, GridView не увеличивается в размерах, чтобы заполнить новое пространство на экране, так что нижняя часть окна есть все белые, как вы можете видеть.
Вот как я делаю то, что я до сих пор:
private void hideHeader(boolean animate) {
if(animate) {
AnimatorSet set = new AnimatorSet();
set.playTogether(
ObjectAnimator.ofFloat(mImageHeader, "translationY", -mImageHeader.getHeight()),
ObjectAnimator.ofFloat(mShareButton, "translationY", -mImageHeader.getHeight()),
ObjectAnimator.ofFloat(mIndicator, "translationY", -mImageHeader.getHeight()),
ObjectAnimator.ofFloat(mViewPager, "translationY", -mImageHeader.getHeight())
);
set.setDuration(700l);
set.start();
}
else {
//TODO finish
}
}
Как вы можете сказать из кода, я использую ViewPager. В этом случае GridView на самом деле является фрагментом, в котором я сначала думал, что моя проблема исходит. Однако, это не тот случай, когда ViewPager заполняет экран и фрагмент внутри него нет, а сама ViewPager является то, что не заполнение вниз по вертикали:
Вот XML родителя фрагмент (который содержит большое изображение, Share кнопку и ViewPager + индикатор):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="@android:color/white"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include android:id="@+id/fp_abf"
layout="@layout/action_bar_footer"/>
<include android:id="@+id/fp_image_header"
layout="@layout/widget_image_header"
android:layout_below="@id/fp_abf"/>
<TextView android:id="@+id/fp_share_button"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_below="@id/fp_image_header"
android:gravity="center"
android:background="@drawable/selectable_action_button_grey_to_bit_green"
android:textSize="14dp"
android:textColor="@android:color/white"
android:text="@string/share_caps"/>
<com.viewpagerindicator.TabPageIndicator android:id="@+id/fp_indicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/fp_share_button"
android:background="@color/header_background"/>
<android.support.v4.view.ViewPager android:id="@+id/fp_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/fp_indicator"/>
</RelativeLayout>
Я первоначально имел это как LinearLayout, но пытался переключить его на Относительный видеть, если это будет делать какие-либо разницы (это Бесполезный «т).
Как вы можете видеть, ViewPager имеет layout_height из "match_parent", который, как я думал, будет достаточным для заполнения всего пространства, которое у него есть. Я думаю, что происходит то, что мнение не уведомляется о том, что у него больше места для работы и, следовательно, перерисовки его границ, но я не уверен, как его запускать.
Кто-нибудь знает, как это сделать (или лучший метод для достижения того, чего я хочу)? Спасибо за прочтение.
Вашего метод не плохо, но то, что вы можете сделать, это написать пользовательский Аниматор для обработки LayoutParams, изменяя высоту соображений и а не их положение. Таким образом, большое изображение идет от текущей высоты до 0, а ViewPager - от текущей высоты до + высоты большого изображения. Возможно, потребуется вызвать ретранслятор во время анимации. – Tom
@Tom Я думал об использовании функции scaleY в ViewPager, но проблема в том, что, как растягивает представление, а не увеличивает его границы. Я также попытался сделать viewPager.invalidate() после завершения анимации, но это тоже не сработало. – JMRboosties
Я не имел в виду «scaleY», я имел в виду пользовательский Animator, который фактически изменил свойство «LayoutParams.height». Проверьте это: http://stackoverflow.com/questions/7902976/objectanimator-animate-lingleayout-width – Tom