ViewPager:一个app第一次打开(或更新后)要用到的导航界面


第一次写。新人。。。。。。。。


每次安装新的app或者更新一个版本都会调用这个功能!

ViewPager

首先创建一个package,新建三个class,分别为Guide、Welcome、ViewPagerAdapter(引导界面、欢迎界面、适配器)。

来到Guide.class。先做初始化和定义工作:


需要定义ViewPager,viewPagerAdapter,以及存放views的List和下方红点和白点的ImageView数组,并给点设置id。然后我们注册一个Button用来跳出导航界面进入主界面。

然后配置R.layout.guide文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00000000"></android.support.v4.view.ViewPager>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_horizontal"
        android:layout_alignParentBottom="true">
        <ImageView
            android:id="@+id/iv1"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:src="@drawable/dian1"/>
        <ImageView
            android:id="@+id/iv2"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:src="@drawable/dian"/>
        <ImageView
            android:id="@+id/iv3"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:src="@drawable/dian"/>

    </LinearLayout>
</RelativeLayout>
我们需要用到android.support.v4包下的Viewpager,然后加入一个LinearLayout,在里面放入三个圆点,dian1为红色圆点,dian为白色。


这就是滑动图片时,图片下方显示的圆点,红色为选中状态即当前所选图片,白色为未选中状态。

接着,写两个初始化,initViews();和initDots();


private void initDots() {
        dots = new ImageView[views.size()];
        for (int i = 0; i < views.size(); i++) {
            dots[i] = (ImageView) findViewById(ids[i]);
        }
    }

    private void initViews() {
        LayoutInflater layoutInflater = LayoutInflater.from(this);
        views = new ArrayList<View>();
        views.add(layoutInflater.inflate(R.layout.one, null));
        views.add(layoutInflater.inflate(R.layout.two, null));
        viewPager.setAdapter(vpAdapter);
        viewPager.setOnPageChangeListener(this);

        start = (Button) findViewById(R.id.start);
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Guide.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }

这两个方法用来加载滑动所用图片和圆点图片,用for循环把ImageView数组里的3个圆点全部通过findViewByid得到,滑动图片通过layoutinflater的layoutinflater.from()加载,one,two两个XML文件只是放入两张图片,就不展示出来了。

然后给Viewpager设置Adapter和页面改变监听器。并初始化Button,给一个点击事件,通过点击Button来打开MainActivity。


因为我们设置了监听器,所以我们还需要重写一下他的方法:

   @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    //当该页面被选中时调用,该页面用红色标记,其余为白色。
    public void onPageSelected(int position) {
        for (int i = 0; i < ids.length; i++) {
            if (position == i) {
                dots[i].setImageResource(R.drawable.dian1);
            } else {
                dots[i].setImageResource(R.drawable.dian);
            }
        }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}
三个方法,第一个在页面被滑动的时候调用,第二个在页面被选中的时候调用,第三个当页面滑动状态改变的时候调用,这里我们只要用第二个来设置什么时候用红色标记就可以了。用if语句判断,当页面position和dots[]的位置相同时就用红色标记,其他都显示白色。

接着,完成ViewPagerAdapter:

public class ViewPagerAdapter extends PagerAdapter {

    private List<View> views;
    private Context context;

    //重写adpter的构造方法
    public ViewPagerAdapter(List<View> views, Context context) {
        this.views = views;
        this.context = context;
    }

    @Override
    public void destroyItem(View container, int position, Object object) {
        super.destroyItem(container, position, object);
        ((ViewPager) container).removeView(views.get(position));
    }

    @Override
    public Object instantiateItem(View container, int position) {
        ((ViewPager) container).addView(views.get(position));
        return views.get(position);
    }

    @Override
    public int getCount() {
        return views.size();
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return (arg0 == arg1);
    }
}
我们给ViewPagerAdapter传入两个参数,一个是views数组,一个是context。然后重写他的构造方法,并完成它的内部方法。

destroyItem方法用来删除某个view,instantiateItem则是用来添加view、并返回他加入的位置。具体如代码所示。


最后来完成一下Welcome欢迎界面:

public class Welcome extends Activity {

    private boolean isFirstIn = false;
    private static final int TIME = 2000;
    private static final int GO_HOME = 1000;
    private static final int GO_GUIDE = 1001;
    private SharedPreferences preferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcom);
        //写一个初始化方法
        init();
    }

    //需要创建一个Handle来对UI进行操作
    private android.os.Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case GO_HOME:
                    gohome();
                    break;
                case GO_GUIDE:
                    goguide();
                    break;
            }
        }

    };


    private void init() {
        SharedPreferences preferences = getSharedPreferences("wxj", MODE_PRIVATE);
        isFirstIn = preferences.getBoolean("isFirstIn", true);
        if (!isFirstIn) {
            mHandler.sendEmptyMessageDelayed(GO_HOME, TIME);
        } else {
            mHandler.sendEmptyMessageDelayed(GO_GUIDE, TIME);
            SharedPreferences.Editor edior = preferences.edit();
            edior.putBoolean("isFirstIn", false);
            edior.commit();
        }
    }

    private void goguide() {
        Intent i = new Intent(Welcome.this, Guide.class);
        startActivity(i);
        finish();
    }

    private void gohome() {
        Intent i = new Intent(Welcome.this, MainActivity.class);
        startActivity(i);
        finish();
    }

}

这个欢迎界面也并不复杂,因为这是第一次打开和更新才调用的界面,所以我们要设置一个布尔参数isFirstIn,判断他是否为第一个进入。并创建Handler对象给他两个判断,进入主界面或是进入Guide界面。写一个初始化方法init();创建一个SharedPrefenrence,调用它的Editor来给isFirstIn设置变化,当他第一次打开后就设置为false,并上交。这样再次打开程序的时候就不会进入guide而是直接跳转Main界面。gohome和goguide这两个方法比较简单,简单的打开新activity和关闭当前activity。

welcome.XML也只放入一张欢迎图片比较简单就不展示了。


好了,我们已经完成这个ViewPager了。相信以后大家都用得上这个!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值