Наконец, я нашел довольно простое решение, которое показывает анимацию, точно такую же, как прилагаемый gif - в решениях @ Nauman oder @ Omid анимация показа начинается до завершения анимации скрытия. Но обязательно используйте новейшую библиотеку поддержки! Тестировал с версией 23.2.1.
Пример использования:
- Показать фабу 1 на вкладке 1 (индекс 0)
- Показать фаб 2 на вкладке 2 (индекс 1)
- Не показывать фабулу на вкладке 3 (индекс 2)
В вашем xml поместите фабрики с уникальными идентификаторами и видимостью, установленными на невидимую:
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:src="@drawable/some_icon"
android:visibility="invisible" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:src="@drawable/another_icon"
android:visibility="invisible" />
Затем добавьте два поля для ваших фабрик в Activity (вы также можете использовать локальные переменные или каждый раз получать View с помощью findViewById(...)
):
public class MainActivity extends AppCompatActivity {
private FloatingActionButton fab1;
private FloatingActionButton fab2;
В вашей onCreate(...)
функции найдите эти представления и сохраните их в объявленных полях:
fab1 = (FloatingActionButton) findViewById(R.id.fab1);
fab2 = (FloatingActionButton) findViewById(R.id.fab2);
Затем объявите функцию, которая показывает правильную фабрику для данной позиции. Случай по умолчанию (вкладка 3 или более) довольно прост: просто вызовите метод hide()
на фабрике. show()
и hide()
уже реализуют анимацию масштабирования. Но если мы скроем fab2 на вкладке 1, нам придется дождаться его завершения, прежде чем мы сможем показать fab1. Итак, установите FloatingActionButton.OnVisibilityChangedListener
в качестве параметра для метода hide(...)
и покажите желаемую новую фабрику в методе onHidden(...)
этого слушателя. Результат такой:
public void showRightFab(int tab) {
switch (tab) {
case 0:
fab2.hide(new FloatingActionButton.OnVisibilityChangedListener() {
@Override
public void onHidden(FloatingActionButton fab) {
fab1.show();
}
});
break;
case 1:
fab1.hide(new FloatingActionButton.OnVisibilityChangedListener() [
@Override
public void onHidden(FloatingActionButton fab) {
fab2.show();
}
});
break;
default:
fab1.hide();
fab2.hide();
break;
}
}
Это было самое сложное! Теперь добавьте слушателя к ViewPager для вызова функции showRightFab(...)
каждый раз при изменении выбранной вкладки.
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
showRightFab(position);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageScrollStateChanged(int state) {}
});
Наконец, вызовите функцию один раз вручную в методе onCreate(...)
, чтобы показать фабрику на вкладке по умолчанию, потому что метод ViewPager.OnPageChangeListener
onPageSelected(...)
не вызывается при запуске (например, в противном случае, если вы откроете приложение, и оно покажет вкладку 1, фабрика не будет отображаться, потому что функция showRightFab(...)
никогда не вызывалась).
showRightFab(viewPager.getCurrentItem());
Эта работа отлично подходит для моего приложения!
person
Felix Edelmann
schedule
17.03.2016
fab.setOnclick.....
по-прежнему такое же, как - для включения различных действий, поэтому вы меняете его в том же месте, сохраняетеint position
, обновляете его междуtablayout.OnPageChnge ...
, поэтому на вкладке 1position = 1
и в вашем fab onclick `switch ( отравление): ` - person user46772   schedule 29.07.2016