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