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

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

http://blog.csdn.net/lancees/article/details/9164421

重点是如下代码:

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图片

现在将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下划线可实现滑动时候随之切换的效果

时间: 2024-11-10 08:51:01

【界面优化】使用viewpagerindicator添加下划线滑动动画的相关文章

html超链接添加下划线

在需要的连接添加行内样式: <a href="ddrb/090630.asp" target="_blank" style="text-decoration:underline;">30</a> CSS text-decoration 属性 可能的值 值 描述 none 默认.定义标准的文本. underline 定义文本下的一条线. overline 定义文本上的一条线. line-through 定义穿过文本下的一条线

IOS UIlabel 、UIButton添加下划线

1.给UILabel 添加下划线 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 300, 100)]; label.backgroundColor = [UIColor redColor]; label.numberOfLines = 3; NSMutableAttributedString *content = [[NSMutableAttributedString alloc]initWithString

网页中添加下划线的方法汇总及优缺点

本文主要介绍了添加下划线样式的几乎所有方法,并且比较了每一种方法的优缺点.没想到之前一直没有注意的下划线还有这么多玄机奥秘! 本文由 nzbin 翻译,艾凌风 校稿.未经许可,禁止转载! 英文出处:css-tricks.com 发表地址:http://web.jobbole.com/89425/ 有很多种添加下划线样式的方法.可能你还记得< Crafting link underlines on Medium >这篇文章.Medium 并没有尝试特殊的方法,只是想创建一个漂亮的看起来正常的下划

iOS开发-UILabel和UIButton添加下划线

关于UILabel和UIButton有的时候需要添加下划线,一般有两种方式通过默认的NSMutableAttributedString设置,第二种就是在drawRect中画一条下划线,本文就简单的选择第一种,第二种有兴趣的可以自己研究一下. UILabel设置下划线: UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 310, 50)]; label.backgroundColor = [UIColor red

android textView 替文字添加下划线 删除线

android textView 为文字添加下划线 删除线android textview 添加下划线 中划线 删除线tv=(TextView)findViewById(R.id.tvId);tv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); //删除线//Paint.UNDERLINE_TEXT_FLAG 下划线 XAMARIN: TextView text = FindViewById<TextView>(Resource.Id.xxx

使用NSMutableAttributedString添加下划线、删除线、阴影、填充、不同字体颜色等

在iOS开发中,有时会遇到需要添加下划线,或者设置字符串中某几个字的颜色的情况,最常见的栗子就是注册页面,如图所示: 几乎所有注册页面中都会出现这么一句话 "点击下一步表示您已同意<用户服务协议>",而且可以看到,"<用户服务协议>"几个字是橙色的,并且它们下面还有下划线.这是怎么实现的呢? 有的同学可能会说:"不同颜色就设置两个label,让左边的label显示前半句并设置为黑色,让右边的label显示后半句并设置为橙色就行了.&

Android TextView 添加下划线的几种方式

总结起来大概有5种做法: 1.当文字中出现URL.E-mail.电话号码等的时候,可以将TextView的android:autoLink属性设置为相应的的值, 如 果是所有的类型都出来就是android:autoLink="all".当然也可以在java代码里 做,textView01.setAutoLinkMask(Linkify.ALL); 2.将要处理的文字写到一个资源文件,如string.xml,然后的java代码里引用(直接写在代码了是不可行的,会直接把文字都显示处理) 3

Android--去除EditText边框,添加下划线

<span style="font-family: Arial, Helvetica, sans-serif;"><?xml version="1.0" encoding="utf-8"?> </span> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_wi

[UGUI]图文混排(五):添加下划线

0.下划线标签 标签格式:<material=underline c=#ffffff h=1 n=*** p=***>blablabla...</material> material标签会在最后的渲染过程中被自动去除. 1. 经过CalculateLayoutWithImage这个方法后,可以得到一个去掉了图片标签的字符串,以及对应的顶点列表. 原文地址:https://www.cnblogs.com/lyh916/p/9307984.html