控件使用(一)---ViewPager实现引导页带监听点

来源:互联网 发布:方维o2o 6.0 源码 编辑:程序博客网 时间:2024/05/22 03:09

    ViewPager简单使用----实现应用欢迎页--->引导页--->主页面

引导页是基本每个应用都配备的页面,网上也有很多,但有些不全,有些太简单!所以自己总结了一下给大家参考,也方便自己以后随时嵌套使用.这只是随手弄的,代码不太规范,有需要自己调整修改!不多废话,进入正题(直接将代码复制到相应地方,改了图片就能起飞,注释还算详细,自己看吧):

首先是欢迎页WelcomeActivity:

这里的SharedPreferences是用来判断是否第一次启动应用的,是就进入引导页,否就直接进入主页面

package com.sunapollo.myapplication;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Handler;import android.view.Window;import android.view.WindowManager;public class WelcomeActivity extends Activity{    boolean isFirstIn = false;    Intent intent;    /*  * 这个Activiyt是程序启动画面,也就是一个图片。在这个Activity里使用了Handler一秒后会进入到引导Activity里面。  */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏,注意一定要在绘制view之前调用这个方法,不然会出现          setContentView(R.layout.welcome);        SharedPreferences preferences = getSharedPreferences("first_pref",                MODE_PRIVATE);        isFirstIn = preferences.getBoolean("isFirstIn", true);        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);   //全屏显示          new Handler().postDelayed(new Runnable(){            public void run(){                if (isFirstIn) {                    // start GuideActivity                    intent = new Intent(WelcomeActivity.this, GuideActivity.class);                } else {                    // start MainActivity                    intent = new Intent (WelcomeActivity.this,MainActivity.class);                }                WelcomeActivity.this.startActivity(intent);                WelcomeActivity.this.finish();            }        }, 1000);    }}

布局文件(welcome.xml)就这么简单粗暴,一个图片:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@drawable/aaa"></LinearLayout>

如果是第一次进入应用,那么就会跳转到导航页面GuideActivity:

package com.sunapollo.myapplication;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.LinearLayout;import java.io.InputStream;import java.util.ArrayList;import java.util.List;/** * 实现首次启动的引导页面 */public class GuideActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{    private ViewPager vp;    private int []imageIdArray;//图片资源的数组    private List<View> viewList;//图片资源的集合    private ViewGroup vg;//放置圆点    //实例化原点View    private ImageView iv_point;    private ImageView []ivPointArray;    //最后一页的按钮    private ImageButton ib_start;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.view_pager);        //标记是否首次启动        SharedPreferences preferences = getSharedPreferences(                "first_pref", MODE_PRIVATE);        SharedPreferences.Editor editor = preferences.edit();        editor.putBoolean("isFirstIn", false);        editor.commit();        ib_start = (ImageButton) findViewById(R.id.guide_ib_start);        ib_start.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                startActivity(new Intent(GuideActivity.this,MainActivity.class));                finish();            }        });        //加载ViewPager        initViewPager();        //加载底部圆点        initPoint();    }    /**     * 加载底部圆点     */    private void initPoint() {        //这里实例化LinearLayout        vg = (ViewGroup) findViewById(R.id.guide_ll_point);        //根据ViewPageritem数量实例化数组        ivPointArray = new ImageView[viewList.size()];        //循环新建底部圆点ImageView,将生成的ImageView保存到数组中        int size = viewList.size();        for (int i = 0;i<size;i++){            iv_point = new ImageView(this);            iv_point.setLayoutParams(new ViewGroup.LayoutParams(20,20));            iv_point.setPadding(30,0,30,0);//left,top,right,bottom            ivPointArray[i] = iv_point;            //第一个页面需要设置为选中状态,这里采用两张不同的图片            if (i == 0){                iv_point.setBackgroundResource(R.drawable.dark_dot);            }else{                iv_point.setBackgroundResource(R.drawable.white_dot);            }            //将数组中的ImageView加入到ViewGroup            vg.addView(ivPointArray[i]);        }    }    /**     * 加载图片ViewPager     */    private void initViewPager() {        vp = (ViewPager) findViewById(R.id.guide_vp);        //实例化图片资源        imageIdArray = new int[]{R.drawable.bbb,R.drawable.ccc,R.drawable.ddd};        viewList = new ArrayList<>();        //获取一个Layout参数,设置为全屏        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(                LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);        //循环创建View并加入到集合中        int len = imageIdArray.length;        for (int i = 0;i<len;i++){            //new ImageView并设置全屏和图片资源            ImageView imageView = new ImageView(this);            imageView.setLayoutParams(params);            imageView.setImageBitmap(readBitMap(GuideActivity.this,imageIdArray[i]));            //ImageView加入到集合中            viewList.add(imageView);        }        //View集合初始化好后,设置Adapter        vp.setAdapter(new GuidePagerAdapter(viewList));        //设置滑动监听        vp.setOnPageChangeListener(this);    }    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {    }    /**     2.  * 以最省内存的方式读取本地资源的图片     3.  * @param context     4.  * @param resId     5.  * @return     6.  */    public static Bitmap readBitMap(Context context, int resId){            BitmapFactory.Options opt = new BitmapFactory.Options();            opt.inPreferredConfig = Bitmap.Config.RGB_565;             opt.inPurgeable = true;             opt.inInputShareable = true;               //获取资源图片            InputStream is = context.getResources().openRawResource(resId);                return BitmapFactory.decodeStream(is,null,opt);         }    /**     * 滑动后的监听     * @param position     */    @Override    public void onPageSelected(int position) {        //循环设置当前页的标记图        int length = imageIdArray.length;        for (int i = 0;i<length;i++){            ivPointArray[position].setBackgroundResource(R.drawable.dark_dot);            if (position != i){                ivPointArray[i].setBackgroundResource(R.drawable.white_dot);            }        }        //判断是否是最后一页,若是则显示按钮        if (position == imageIdArray.length - 1){            ib_start.setVisibility(View.VISIBLE);        }else {            ib_start.setVisibility(View.GONE);        }    }    @Override    public void onPageScrollStateChanged(int state) {    }}

导航页布局view_pager.xml(LinearLayout)是用来控制点的,ImagerButton(如果滑倒最后一页,出现按钮,点击进入主页面):

<?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">    <android.support.v4.view.ViewPager        android:id="@+id/guide_vp"        android:layout_width="match_parent"        android:layout_height="match_parent"></android.support.v4.view.ViewPager>    <LinearLayout        android:id="@+id/guide_ll_point"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_marginBottom="40dp"        android:gravity="center_horizontal"        android:orientation="horizontal"></LinearLayout>    <ImageButton        android:id="@+id/guide_ib_start"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_above="@+id/guide_ll_point"        android:layout_centerHorizontal="true"        android:background="@null"        android:src="@mipmap/ic_launcher"        android:visibility="gone" /></RelativeLayout>

GuidePagerAdapter:

package com.sunapollo.myapplication;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import java.util.List;/** * Created by 南尘 on 2016/7/10. */public class GuidePagerAdapter extends PagerAdapter {    private List<View> viewList;    public GuidePagerAdapter(List<View> viewList) {        this.viewList = viewList;    }    /**     * @return 返回页面的个数     */    @Override    public int getCount() {        if (viewList != null) {            return viewList.size();        }        return 0;    }    /**     * 判断对象是否生成界面  * @param view  * @param object  * @return     */    @Override    public boolean isViewFromObject(View view, Object object) {        return view == object;    }    /**     * 初始化position位置的界面  * @param container  * @param position  * @return     */    @Override    public Object instantiateItem(ViewGroup container, int position) {        container.addView(viewList.get(position));        return viewList.get(position);    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        container.removeView(viewList.get(position));    }}

最后就是主页面了,我在里面什么操作都没有,,就是默认的MainActivity,就不贴出来了.


Activity记得注册就行了!


手懒得童鞋点这里http://download.csdn.net/detail/qq_27757229/9871422源码直接下载


原创粉丝点击