GuidePageView故名思意,是指第一次进入应用时的导航页,效果图如下:
主要的技术点有:
1.自定义抽样类:GuideAdapter
public abstract class GuideAdapter {
private GuidePageView mGuidePageView;
public abstract List getIndicator();
public abstract List getDisplayView();
public void setGuidePageView(GuidePageView guidePageView){
mGuidePageView=guidePageView;
}
//可扩展
}
其中getIndicator()方法用来设置indicator的图像信息;getDisplayView()用来设置页面展示信息;setGuidePageView(GuidePageView guidePageView)主要是在程序中获取GuidePageView对象,对用户是不可见的。后期可扩展。
2.在实现了adapter方式后,进一步思考能否简化程序。adapter的优势在于程序逻辑清晰,明了,可扩展性也高,然而却有点繁杂,所以进一步封装出另外一种集成方式:setData(int drawable, int[] imgs),用户只需要提供一个selector形式的drawable资源,和一组图片资源,简单好用。
public void setData(int drawable, int[] imgs){
//图片数量
lens=imgs.length;
//点
initDots(lens, drawable);
//视图
initViews(imgs);
vp.setOffscreenPageLimit(3);
vp.setCurrentItem(0);
}
3.在代码中需要改变设置或者样式的地方不在少数,有时候显示设置会显得臃肿,所以提出使用一个设置类的实体类:GuidePageViewStyle。
/**
* 获取样式对象
*/
public GuidePageViewStyle getGuidePageStyle(){
return mGuidePageViewStyle;
}
用户可以在程序中通过这个方法直接获取GuidePageViewStyle对象,支持的设置有:
//dot和底部之间的距离
private int dotsHeight;
//按钮样式
private int btnStyle=R.drawable.flag_01;
//btn和底部之间的距离
private int btnHeight;
//btn的文字,默认为“马上体验”
private String btnStr="马上体验";
4.设置直接点击跳过事件,调用该方法设置跳转。
/**
* 设置点击事件
*/
public void setJumpClick(OnClickListener listener){
}
5.另外:由于GuidePageView一般情况下,只在程序中出现一次,即第一次进入程序的时候。在工作中,一般可以在前一个界面中设置:SharedPreferences。比如:
if(sp.getBoolean("isFirsh", true)==true){
setHotCity();
editor.putBoolean("isFirsh", false);
editor.commit();
//相应的intent,跳转到GuidePage界面
}else{
//想应的intent,跳转到其他的常规界面
}
主要暴露接口和设置:
详见我的另外一篇博文:http://blog.csdn.net/u011072613/article/details/53889596
1.在代码中设置数据:
mGuidePageView.setAdapter(new CustomGuideAdapter());
其中CustomGuideAdapter()继承了GuideAdapter():
class CustomGuideAdapter extends GuideAdapter{
@Override
public List getIndicator() {
// TODO Auto-generated method stub
dotViews = new ArrayList();
for(int i = 0; i < pics.length; i++){
ImageView iv=(ImageView)LayoutInflater.from(getApplicationContext()).inflate(R.layout.dot_view, null);
ImageView iv01=new ImageView(getApplicationContext());
iv01.setBackgroundResource(R.drawable.dot);
iv01.setLayoutParams(mParams);
mParams.setMargins(20, 20, 20,
20);
dotViews.add(iv);
}
return dotViews;
}
@Override
public List getDisplayView() {
// TODO Auto-generated method stub
views = new ArrayList();
for(int i = 0; i < pics.length; i++){
View view=LayoutInflater.from(getApplicationContext()).inflate(R.layout.img, null);
view.setBackgroundResource(pics[i]);
views.add(view);
}
return views;
}
}
mGuidePageView.setData(R.drawable.dot, pics);
其中setData(int resId,int[] pic)的第一个参数是指指示器的源selector资源,第二个参数是指需要展示的若干张图片数组。
2.设置样式
guidePageViewStyle=mGuidePageView.getGuidePageStyle();
guidePageViewStyle.setBtnStr("我要进入了");
当然需要记住的是样式设置的代码必须在数据设置的前面,这样才能让设置生效,不然程序会调用默认的设置。
样式包括:字体的背景,颜色,什么字体等等。
3.跳转监听:
mGuidePageView.setJumpClick(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent mIntent=new Intent(GuidePageViewActivity.this,CommonActivity.class);
startActivity(mIntent);
}
});
大概的方法就这么多,GuidePageView的程序比SplashView要相对复杂,花去的时间也较多,在最初的时候会出现卡顿,但是经过慢慢调优才到现在的效果。
该GuidePageView还有很多需要扩展的地方。。。。(比如添加多个动画界面,将导航换成不同的图片,而不是单一的设置等),敬请期待。
github:https://github.com/commutescript
欢迎交流,欢迎star。