【发布时间】:2018-01-30 10:40:21
【问题描述】:
我有一个带有 tabLayout 的 viewPager,如下所示:
滑动页面时我需要动画点动画放大动画(将选定的点缩放到她的原始大小)。
我有带有 app:tabBackground 可绘制 xml 文件的 TabLayout 元素:
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/on"
android:drawable="@drawable/selected_dot"
android:state_selected="true" />
<item
android:id="@+id/off"
android:drawable="@drawable/default_dot" />
<transition
android:fromId="@id/off"
android:toId="@+id/on">
<animation-list>
<!-- here I stuck -->
</animation-list>
</transition>
</animated-selector>
而tabLayout与viewPager是这样连接的:
tabLayout.setupWithViewPager(viewPager);
点只是一个形状元素,所以 selected_dot.xml 看起来像这样:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:innerRadius="0dp"
android:shape="ring"
android:thickness="8dp"
android:useLevel="false">
<solid android:color="#FFFFFF"/>
</shape>
</item>
我认为我需要动画资源文件来创建放大和缩小动画,所以我创建了 scale.xml 文件作为动画资源
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" >
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXScale="0.5"
android:fromYScale="0.5"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1"
android:toYScale="1" >
</scale>
</set>
但是如何我可以将它应用到点上呢?我以为我可以在 tabLayout drawable 的 transition 标记内添加动画,但没有成功。我也尝试在 viewPager 的 onPageChangeListener 中以编程方式执行此操作,但我不知道如何将形状(选定的点)表示为启动动画的视图。我尝试了tabLayout.getTabAt(position).getCustomView().startAnimation(...);,但 getCustomView() 返回 null。
感谢您的帮助,对不起我的英语!
【问题讨论】:
标签: android animation android-tablayout