2015-07-18 6 views
2

Я реализовал TabLayout с viewPager, для четырех вкладок. Вкладки имеют customView, так как для каждой вкладки есть два значения textView (текст + невидимый счет). Итак, я могу обрабатывать множество элементов интерфейса при изменении вкладок, но я не могу оживить невидимый textView.Как вы можете анимировать в TabLayout Android?

Мой пользовательский XML имеет android:animateLayoutChanges="true" как для textView, так и для его родителя RelativeLayout.

Плюс, я попытался установить эту функцию на фактической вкладке, попробовал вариант анимации, никто не работает. Ps - без анимации, я просто настраиваю видимость (уходит, видимо), которая работает.

private void updateUnseenOnTab(int position, int unseen) { 
    ViewGroup vg = (ViewGroup) mTabLayout.getChildAt(0); 

    ViewGroup vgTab = (ViewGroup) vg.getChildAt(position); 
    View view = vgTab.getChildAt(0); 

    if (view != null && view.findViewById(R.id.tab_unseen) instanceof TextView) { 
     final TextView unseenText = (TextView) view.findViewById(R.id.tab_unseen); 
     if (unseen <= 0) { 
      unseenText.setText("0"); 
      Animation fadeOut = new AlphaAnimation(0, 1); 
      fadeOut.setDuration(1000); 
      unseenText.setAnimation(fadeOut); 
     } else { 
      String currentText = unseenText.getText().toString(); 
      try { 
       Animation fadeIn = new AlphaAnimation(0, 1); 
       fadeIn.setDuration(1000); 
       unseenText.setAnimation(fadeIn); 
       unseenText.setText("" + ((TextUtils.isEmpty(currentText) ? 0 : unseen) + Integer.valueOf(currentText))); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

ли вы заставить его работать? – Markus

+0

@Markus - к сожалению, нет, анимация, похоже, не работает таким образом с этими представлениями. – Dus

+0

Ответ здесь может быть полезным: http://stackoverflow.com/questions/23240774/android-put-animation-in-page-scroll -n-view-pager-using-fragment, с которым я столкнулся, чтобы исчезнуть, вымыть ярлыки таким образом. – Markus

ответ

1

Я не знаю, вы хотите, чтобы оживить каждую вкладку или каждый вид ребенка внутри вкладки. Это будет анимировать каждую вкладку один за другим с задержкой 150 мс. Если вы хотите оживить каждого ребенка внутри одной вкладки, просто поместите его в другой цикл.

  tabs = (TabLayout) findViewById(R.id.tabs); 
      ViewGroup vg = (ViewGroup) tabs.getChildAt(0); 
      int tabsCount = vg.getChildCount(); 
      for (int i = 0; i < tabsCount; i++) 
      { 
       int delay = (i * 150) + 750; //this is starting delay 
       ViewGroup vgTab = (ViewGroup) vg.getChildAt(i); 
       vgTab.setScaleX(0f); 
       vgTab.setScaleY(0f); 

       vgTab.animate() 
         .scaleX(1f) 
         .scaleY(1f) 
         .setStartDelay(delay) 
         .setInterpolator(new FastOutSlowInInterpolator()) 
         .setDuration(450) 
         .start(); 
      } 
0

Чтобы анимировать взгляды внутри каждой отдельной закладке, вы можете сначала установить пользовательский вид на каждой вкладке, как этот

tabLayout.getTabAt(0).setCustomView(R.layout.custom_view); 

Теперь вы можете надуть каждый элемент custom_view как это

View tabView = mTabLayout.getTabAt(0).getCustomView(); 
TextViewPlus tabText = (TextViewPlus)tabView(R.id.tab_text); 
tabText.setScaleX(1.5f); 

Теперь вы можете вызвать анимацию при выборе вкладки или в любом другом событии.

Обратите внимание, что вам, возможно, потребуется обновить, чтобы построить инструменты v23 использовать getCustomView()

Смежные вопросы