有许多博客和开源项目都致力于这项工作,但是他们的工作大都是为了制作类似于启动页的效果,ViewPager全屏显示,或者自己可操作的属性难以满足要求,因此我想把ViewPager和底部的指示物封装在一个自定义的View中,作为一个新的控件在xml中使用,所以自己来实现了一个。
而且,在用自定义视图封装ViewPager时,出现了一个问题,就是ViewPager的所有页不能全部显示的问题,不知道是因为这个问题太简单还是什么其它原因,在网上并没有搜到这个问题的解决方法(事实上连提问的人都没有……),困扰了我半个多星期,终于解决,这一点在正文里会介绍,先来贴一下效果图:
下面来介绍我的实现过程:
首先在res/values/目录下创建attrs.xml文件,用来定义新View自定义的属性:
其中:
dotsViewHeight定义底部指示物所在视图(我定义为一个LinearLayout)的高度,也就是示例图中圆圈所在灰色透明部分的高度,默认为40像素;
dotsSpacing定义底部指示物之间的间距,默认为0;
dotsFocusImage定义代表当前页的指示物的样子;
dotsBlurImage定义代表非当前页的指示物的样子;
android:scaleType定义ViewPager中ImageView的scale类型,如果ViewPager中的View不是ImageView,则此属性没有效果,默认为ScaleType.FIT_XY;
android:gravity定义底部指示物在父View(即示例灰色透明部分)的gravity属性;
dotsBackground定义底部指示物的背景颜色或背景图;
dotsBgAlpha定义底部指示物的背景颜色或背景图的透明度,取值为0-1,0代表透明;
changeInteval定义ViewPager自动切换的时间间隔,单位为ms,默认为1000ms(这个地方实际的间隔比设置的要大,不知道是什么原因,望高手解答);
下一步,定义PageAdapter,为ViewPager提供内容:
private List<View> views = null;
private ScaleType scaleType;
public ViewPagerAdapter(List<View> views) {
this(views, ScaleType.CENTER);
}
public ViewPagerAdapter(List<View> views, ScaleType scaleType) {
super();
this.views = views;
this.scaleType = scaleType;
}
本文地址:https://www.stayed.cn/item/6371
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我