【界面优化】使用viewpagerindicator添加下划线滑动动画

简介: 开源代码viewpagerindicator里面没有实现tab下划线切换过程中的移动动画,都是很突兀的多个fragement之间的切换,导致用户体验略差,google了下相关问题,发现一片博文: http://blog.

开源代码viewpagerindicator里面没有实现tab下划线切换过程中的移动动画,都是很突兀的多个fragement之间的切换,导致用户体验略差,google了下相关问题,发现一片博文:

重点是如下代码:
public class UnderlinePageIndicatorEx extends UnderlinePageIndicator{
       public UnderlinePageIndicatorEx(Context context) {
           super(context, null);
           
        }
        public UnderlinePageIndicatorEx(Context context, AttributeSet attrs) {
            super(context, attrs, R.attr.vpiUnderlinePageIndicatorStyle);
            
        }
        public UnderlinePageIndicatorEx(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            
        }
        
        
        @Override
        public void setViewPager(ViewPager viewPager) {
            if (mViewPager == viewPager) {
                return;
            }
//            if (mViewPager != null) {
//                //Clear us from the old pager.
//                mViewPager.setOnPageChangeListener(null);
//            }
            if (viewPager.getAdapter() == null) {
                throw new IllegalStateException("ViewPager does not have adapter instance.");
            }
            mViewPager = viewPager;
//            mViewPager.setOnPageChangeListener(this);
            invalidate();
            post(new Runnable() {
                @Override public void run() {
                    if (mFades) {
                        post(mFadeRunnable);
                    }
                }
            });
        }
}

 

UnderlinePageIndicator是 viewpagerindicator里面的开源代码:
/**
* Draws a line for each page. The current page line is colored differently
* than the unselected page lines.
*/

 

 
为每个page画一条线,使得和其他没选中的page的线条颜色不同。
 
下面主要讲下我在项目中修改的步骤和注意点:
1 修改style文件:
   你使用这个开源库的控件的activity里面必须有如下的style
  1.  android:theme="@style/StyledIndicators",对应styles文件下面:
  1. <!-- 下面带横线tab的style -->
        <style name="StyledIndicators" parent="@android:style/Theme.Light">
            <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item>
        </style>
        <style name="CustomTabPageIndicator" parent="Widget.TabPageIndicator">
            <!-- <item name="android:background">@drawable/tab_indicator</item> -->
            <item name="android:background">#00000000</item>
            <item name="android:textAppearance">@style/CustomTabPageIndicator.Text</item>
            <item name="android:textSize">14sp</item>
            <item name="android:textColor">@drawable/viewpager_title_textcolor</item>
            <item name="android:dividerPadding">8dp</item>
            <item name="android:showDividers">middle</item>
            <item name="android:paddingLeft">10dp</item>
            <item name="android:paddingRight">10dp</item>
            <item name="android:fadingEdge">horizontal</item>
            <item name="android:fadingEdgeLength">8dp</item>
        </style>

     


原来的background主要定义了tab的切换时候,下滑
  1. <item name="android:background">@drawable/tab_indicator</item>

    对应的drawable中切换的xml代码:

  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="false" android:state_pressed="false" android:drawable="@android:color/transparent" />
        <item android:state_selected="false" android:state_pressed="true" android:drawable="@android:color/transparent" />     
        <item android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/base_tabpager_indicator_selected" />
        <item android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/base_tabpager_indicator_selected" />
    </selector>

     

其中 base_tabpager_indicator_selected是带有下划线的.9图片
 
base_tabpager_indicator_selected.9.png
 
现在将style文件里面的background修改为:
<itemname="android:background">#00000000</item>

 

然后主要是修改布局,主要是添加 UnderlinePageIndicatorEx布局 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <com.soyoungboy.view.viewpagerindicator.TabPageIndicator
        android:id="@+id/indicator"
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:background="@color/white" />
    <com.soyoungboy.view.viewpagerindicator.UnderlinePageIndicatorEx
        android:id="@+id/underline_indicator"
        android:layout_width="fill_parent"
        android:layout_height="3dp"
         />
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>

 

然后就是代码里边的修改:
  1. //1,声明组件 
    private UnderlinePageIndicatorEx mUnderlinePageIndicator;
    //2,代码实现部分
    mUnderlinePageIndicator = (UnderlinePageIndicatorEx) findViewById(R.id.underline_indicator);
            mUnderlinePageIndicator.setViewPager(viewpager);
            mUnderlinePageIndicator.setFades(false);
            indicator.setOnPageChangeListener(mUnderlinePageIndicator);
如此,ok,完美解决,tab下划线可实现滑动时候随之切换的效果

 

相关文章
|
5月前
|
Android开发
UniApp Android 页面拖动,去掉半圆形阴影
UniApp Android 页面拖动,去掉半圆形阴影
53 0
|
2月前
|
小程序
微信小程序scroll-view横向滚动和纵向滚动实现(亲测管用)
微信小程序scroll-view横向滚动和纵向滚动实现(亲测管用)
|
Android开发
NestedScrollView嵌套WebView导致底部有空白
NestedScrollView嵌套WebView导致底部有空白
442 0
|
Android开发
如何去掉listview滑动时的阴影
如何去掉listview滑动时的阴影
如何去掉listview滑动时的阴影
|
Android开发
Android隐藏Listview和RecyclerView 滑动边界的阴影,去除滚动条加分隔线等
Android隐藏Listview和RecyclerView 滑动边界的阴影,去除滚动条加分隔线等
175 0
|
Android开发
Android 自定义控件之SlidingMenuVertical顶部悬浮(垂直折叠抽屉,有滑动渐变回调,可自行添加渐变动画)
顶部悬浮(垂直折叠抽屉,有滑动渐变回调,可自行添加渐变动画)
2021 0
tablayout支持改变选中文字大小,支持左右滑动,支持viewpager,支持三角可移动指示器
TabLayout [简书地址] (https://www.jianshu.com/p/2c3f868266e8) 基于大神的FlycoTabLayout 传送地址和基本用法 用法和属性和这个库一样 效果图如下 Gif_20180828_142709.
2460 0
|
Android开发
【Android视图效果】仿QQ空间滑动改变标题栏颜色
最近在倒腾公司之前的项目,发现之前的界面是个白色标题栏,不是很美观,所以做了些改进。 先看效果图 165815uykp80g8y3goo5vz.gif 简单说下思路,整个布局大体上是ScrollView里面包含了一个ImageView和RecyclerView,所以先得到ImageView的高度,当ScrollView向上滑动时,设置标题栏的背景色、文字颜色,当超过ImageView的高度时,设置其背景为白色,字体为黑色。
1135 0
|
前端开发 Android开发 Rust
Android - 条纹进度条实现,调整view宽度仿进度条
相关代码请参阅: https://github.com/RustFisher/aboutView/blob/master/app/src/main/java/com/rust/aboutview/activity/RoundCornerActivity.java 美工同学指定了一个进度条样式 这斑斓的进度条,如果要自己画实在是劳民伤财。
3138 0
|
Android开发
Android 优化个人封装仿网易新闻可滑动标题栏 TabLayout (文字或图标)
      小菜在向朋友推荐了自己修改封装的仿网易顶部滑动标题栏 TabSlideLayout 滑动内容可以是文字也可以是网络图标,其原型为 FlycoTabLayout,但是因为年代很久远,小菜当时技术太渣,存在一些小问题,后期做过一些优化,今天趁机会整理一下。
3000 0