引导页

 前面通过共享参数已经能够顺利的从广告页跳转到引导页,现在到了引导页,如何对引导页进行布局呢?引导页一般有三张,利用到了一个传统成熟的控件Viewpager,它在v4包里面,v4包可以保证低版本的手机也可以使用这个控价,兼容性更强。         首先来看下布局layout

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="com.wj.administrator.layout.activity.LeadActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/lead"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v4.view.ViewPager>
</RelativeLayout>
在整个页面中就一个viewpager,高宽充满屏幕。viewpager里面只需要定义好宽高,定义好id,这一类控件不需要添加图,内容,这一类控件是有适配器的控件,它的所有内容都写在适配件里,它的内容用代码设置。比如滑动多少张图。
1.在布局中中代码就这么简单。2.在java中代码也很简单,1.只需要找到这个控件的对象2.设置和适配器绑定。3.在适配的是比较难得,代码都在里边。首先每一个这样的控件都有指定的适配器,其次要有数据的集合,还有就是一般来说加上增加或者移除的代码。这样就是
1.下面看具体过程首先是在activty中找到该控价,并且设置适配器,与适配器绑定,new了一个适配器,同时传了一个参数。集合list
 
 ArrayList<View> list=new ArrayList<View>();
 
LeadAdapter Adapter=new LeadAdapter(list);
     vp =(ViewPager)findViewById(R.id.lead);
       vp.setAdapter(Adapter);

2.第二创建了一个java文件leadadapter继承Pageradapter,里面一共有四个放法,下面依次介绍:

(1)第一个放法getcount()是获取数量。返回值是多少代表它有多少滑页。
(2)第二个方法是一个固定写法isViewFromObject()有两个参数,view==object就可以了,主要就是你传给viewpager是不是view的孩子。这样写就行了
(3)第三个方法是instantiateItem()加载子页内容,条目的意思。就是往viewpager里面添加布局,有两个参数第一个是viewpager容器对象,第二个参数是当前第几页,从0开始。它必须还要添加一个方法addview()。container.addView(list.get(position));就是当前要展示那一页。
(4)第四个方法是destroyItem(),这个方法什么意思那,就是viewpager有一个最大容量(预加载数量),默认是三页,如果超过了就会报错,放不下了,这个时候必须把旧的移除。它的意思是移除当前显示的页面container.removeView(list.get(position));
 
destroyItem(ViewGroup container, int position, Object object),这个object是做匹配的,是不是要移除那个子条目。

 

 
 
public class LeadAdapter extends PagerAdapter {
    private ArrayList<View> list;
    public LeadAdapter(ArrayList<View> list)
    {
        this.list=list;
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(list.get(position));
        return list.get(position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(list.get(position));
    }
}

 

3.创造数据源:我们的图片不是在布局里面viewpager里添加的,而是在activty里面自己通过代码动态加载,那么如何创造出来那:就是这样下面这个,先new一个控件,然后在setimageResourse();再添加到集合里面,这样资源就有了
ImageView vi=new ImageView(this);
 
 vi.setImageResource(R.drawable.yindao1);

 

 
 
 
 ArrayList<View> list=new ArrayList<View>();
        ImageView vi=new ImageView(this);
        vi.setImageResource(R.drawable.yindao1);
        list.add(vi);
        ImageView v2=new ImageView(this);
        v2.setImageResource(R.drawable.yindao2);
        list.add(v2);
        ImageView v3=new ImageView(this);
        v3.setImageResource(R.drawable.yindao3);
        list.add(v3);
        ImageView v4=new ImageView(this);
        v4.setImageResource(R.drawable.yindao41);
       list.add(v4);

4.现在已经可以滑动了,不知道大家看见没有viewpager滑动的时候图片下面有几个小点点,代表滑动到了哪一页,此时我们需要给它设定一个滑动监听addOnPageChangeListenner()这个监听,里面有三个方法。第一个方法是代表当前正在滚动onPageScrolled(),它的滚动坐标。第二个方法就是我们需要在里面设定了点点换色,onPageSelected(),这个方法说明它已经换页了,这个时候就可以换小点点的颜色了,第三个方法onPageScrollStateChanged(),滑动状态改变。在这里我没有换了。

 vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
            {

            }

            @Override
            public void onPageSelected(int position)
            {
                      state =position;
            }

            @Override
            public void onPageScrollStateChanged(int state)
            {

            }

        });
 
5.滑到最后一面我要做一个滑动跳转,此时滑到最后一面已经滑不动了,如何滑动可以跳转呢?
此时我们可以给viewpager设计一个手势。setOnTouchListener(),这个监听就可以了,所有view都可以写上触摸。里面就一个方法onTouch(),里面有两个参数,view和MotionEvent,首先采用event获取动作,获取的是一个MotionEvent.ACTION_DOWN,按下的动作,记录下开始x坐标,在获取手抬起来的时候记录下X坐标,两者相减大于屏幕的一半就发生跳转,同时结束引导页。state是第三页这个方法才响应,好了写到这里就基本完成了引导页了。
 
 
vp.setOnTouchListener(new View.OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if(state==3) {
                        if (event.getAction() == MotionEvent.ACTION_DOWN) {
                            start_x = event.getX();

                        } else if (event.getAction() == MotionEvent.ACTION_UP) {
                            end_x = event.getX();
                        }
                        if ((start_x - end_x )>= 0.5 * width()) {
                            Intent in = new Intent(LeadActivity.this, MainActivity.class);
                            startActivity(in);
                            finish();

                        }
                    }
                    return false;
                }
            });
        }

 

 
//这个activty里面的全部代码。
 
public class LeadActivity extends BaseActivity implements View.OnClickListener {
    private ViewPager vp;
    private  float start_x=0;
    private float end_x=0;
    private int state;


    @Override
    public void setview() {
        setContentView(R.layout.activity_lead);
    }
    public int width()
    {
        Resources resources = this.getResources();
        DisplayMetrics dm = resources.getDisplayMetrics();
        float density = dm.density;
        int width = dm.widthPixels;
        return width;
    }
    @Override
    public void initview() {

        ArrayList<View> list=new ArrayList<View>();
        ImageView vi=new ImageView(this);
        vi.setImageResource(R.drawable.yindao1);
        list.add(vi);
        ImageView v2=new ImageView(this);
        v2.setImageResource(R.drawable.yindao2);
        list.add(v2);
        ImageView v3=new ImageView(this);
        v3.setImageResource(R.drawable.yindao3);
        list.add(v3);
        ImageView v4=new ImageView(this);
        v4.setImageResource(R.drawable.yindao41);
       list.add(v4);
        LeadAdapter Adapter=new LeadAdapter(list);
     vp =(ViewPager)findViewById(R.id.lead);
       vp.setAdapter(Adapter);
        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
            {

            }

            @Override
            public void onPageSelected(int position)
            {
                      state =position;
            }

            @Override
            public void onPageScrollStateChanged(int state)
            {

            }

        });



            vp.setOnTouchListener(new View.OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if(state==3) {
                        if (event.getAction() == MotionEvent.ACTION_DOWN) {
                            start_x = event.getX();

                        } else if (event.getAction() == MotionEvent.ACTION_UP) {
                            end_x = event.getX();
                        }
                        if ((start_x - end_x )>= 0.5 * width()) {
                            Intent in = new Intent(LeadActivity.this, MainActivity.class);
                            startActivity(in);
                            finish();

                        }
                    }
                    return false;
                }
            });
        }


    @Override
    public void onClick(View v) {

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值