我已为TabLayout
实施了viewPager
四个标签。
标签有customView
,因为每个标签有两个textView
(文本+看不见的计数)。
所以,我在更改标签时能够处理很多UI内容,但是,我无法为看不见的textView
设置动画。
我的自定义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 :(得分:2)
我不知道您是否要为标签内的每个标签或每个子视图设置动画。这将以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();
}
答案 1 :(得分:1)
这是一个很好的图书馆:
https://github.com/ToxicBakery/ViewPagerTransforms
这是开发者文档:
http://developer.android.com/training/animation/screen-slide.html
答案 2 :(得分: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()