ViewPager-IconPageIndicator导航栏效果(增加点击切换)

本文介绍了如何利用ViewPagerIndicator库中的IconPageIndicator实现类似导航栏的效果,以此替代RadioGroup。通过分析源码,发现原组件不支持点击图标切换页面,于是尝试通过继承、反射等方式进行扩展,但遇到访问限制问题。最后采取复制源码并修改notifyDataSetChanged方法,成功实现了点击icon切换页面的功能。此外,还讲解了调整icon间距和添加选择效果的步骤。
摘要由CSDN通过智能技术生成

ViewPagerIndicator地址:https://github.com/JakeWharton/ViewPagerIndicator
最近在使用PageIndicator的时候,用到IconPageIndicator,看效果图,感觉可以把icon那里做成导航栏啊,就可以代替平常使用的RadioGroup,感觉编码会简洁很多。
先把IconPageIndicator运行起来看看,效果还可以,有个缺点,不能点击icon切换page,查看了IconPageIndicator的源码,发现没有添加这个点击事件,可能作者没有这样设计把。只要在notifyDataSetChanged()的循环里添加点击监听事件就好了。
首先想到的是直接继承IconPageIndicator,然后扩展这个方法,可是实践才发现,layout变量是私有的,子类无法访问,而且作者自定义的IcsLinearLayout是包访问权限,别的包也是访问不到。继承扩展这个功能是不行了。
再想到的就是通过反射来实现,尝试了很久,实现不了,也可能自己对反射掌握不是太好。
没办法,只能想到笨办法了,直接copy IconPageIndicator源码,新建一个类,修改其notifyDataSetChanged方法。

修改好的IconPageIndicator源码,需要先配好ViewPagerIndicator。

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.viewpagerindicator.IconPagerAdapter;
import com.viewpagerindicator.PageIndicator;

/**
 * Created by blanke on 15-11-4.
 */
public class SuperIconPageIndicator extends HorizontalScrollView implements PageIndicator {
   

    private final LinearLayout mIconsLayout;
    private ViewPager mViewPager;
    private ViewPager.OnPageChangeListener mListener;
    private Runnable mIconSelector;
    private int mSelectedIndex;

    public SuperIconPageIndicator(Context context) {
        this(context, null);
    }

    public SuperIco
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值