使用ViewPagerAdapter 页面引导适配器设置app启动页,引导页面的实现

    一般的app第一次安装启动的时候,都会有一个启动页面和引导页的画面,然后才进入主程序。anndroid中的ViewPagerAdapter 是一个继承与PageAdapter的 页面引导适配器。由于我的笔记本太卡,AndroidStudio hold不住,装X不成功,狠心卸载了,买新电脑之前还是用eclipse顶着。最近也写了个demo试了一下,觉得还可以。

  1.新建一个项目,结构如图:

 初始页面splash.xml

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context=".SplashActivity" >
 6 
 7     <ImageView
 8         android:layout_width="match_parent"
 9         android:layout_height="match_parent"
10         android:adjustViewBounds="true"
11         android:background="@drawable/welcome_android"
12         android:scaleType="centerCrop" />
13 
14     <TextView
15         android:id="@+id/txtTime"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:layout_alignParentRight="true"
19         android:layout_alignParentTop="true"
20         android:layout_marginRight="20dp"
21         android:layout_marginTop="21dp"
22         android:textSize="18dp"
23         android:text="3秒" />
24 
25 </RelativeLayout>
SplashActivity.java后台代码
  1 package com.wym.dxdmallandroid;
  2 
  3 import java.util.Timer;
  4 import java.util.TimerTask;
  5 
  6 import com.dxd.dxdmallandroid.R;
  7 
  8 import android.app.Activity;
  9 import android.content.Intent;
 10 import android.content.SharedPreferences;
 11 import android.os.Bundle;
 12 import android.os.Handler;
 13 import android.os.Message;
 14 import android.view.View;
 15 import android.widget.TextView;
 16 
 17 /**
 18  * Author:WYM
 19  */
 20 public class SplashActivity extends Activity {
 21     boolean isFirstIn = false;
 22     
 23    private static final int GO_HOME = 1000;
 24    private static final int GO_GUIDE = 1001;
 25    private static final long SPLASH_DELAY_MILLIS = 3000;// 延迟3秒
 26    private static final String SHAREDPREFERENCES_NAME = "first_pref";//存取程序是否是第一次启动
 27    private TextView txtTime;
 28    private int recLen = 3; 
 29    Timer timer = new Timer(); 
 30     /**
 31      * Handler:跳转到不同界面
 32      */
 33     private Handler mHandler = new Handler() {
 34 
 35         @Override
 36         public void handleMessage(Message msg) {
 37             switch (msg.what) {
 38             case GO_HOME:
 39                 goHome();
 40                 break;
 41             case GO_GUIDE:
 42                 goGuide();
 43                 break;
 44             }
 45             super.handleMessage(msg);
 46         }
 47     };
 48 
 49     
 50     
 51     @Override
 52     protected void onCreate(Bundle savedInstanceState) {
 53         super.onCreate(savedInstanceState);
 54         setContentView(R.layout.splash);
 55         txtTime=(TextView) findViewById(R.id.txtTime);
 56          TimerTask task = new TimerTask() {
 57             @Override
 58             public void run() {
 59                 runOnUiThread(new Runnable() {  //ui thread
 60                     @Override
 61                     public void run() {
 62                         txtTime.setText(recLen+"秒");
 63                         recLen--;
 64                         if(recLen<-1)
 65                         {
 66                              timer.cancel(); 
 67                              txtTime.setVisibility(View.GONE); 
 68                         }
 69                     }
 70                 });
 71             }
 72         };
 73         timer.schedule(task, 1000, 1000); // timeTask 
 74         init();
 75     }
 76 
 77     private void init() {
 78         
 79         // 读取SharedPreferences中需要的数据
 80         // 使用SharedPreferences来记录程序的使用次数
 81         SharedPreferences preferences = getSharedPreferences(
 82                 SHAREDPREFERENCES_NAME, MODE_PRIVATE);
 83 
 84         // 取得相应的值,如果没有该值,说明还未写入,用true作为默认值
 85         isFirstIn = preferences.getBoolean("isFirstIn", true);
 86         
 87         
 88         // 判断程序与第几次运行,如果是第一次运行则跳转到引导界面,否则跳转到主界面
 89         if (!isFirstIn) {
 90             // 使用Handler的postDelayed方法,3秒后执行跳转到MainActivity
 91             mHandler.sendEmptyMessageDelayed(GO_HOME, SPLASH_DELAY_MILLIS);
 92         } else {
 93             mHandler.sendEmptyMessageDelayed(GO_GUIDE, SPLASH_DELAY_MILLIS);
 94         }
 95     
 96     }
 97 
 98     //跳转到主页
 99     private void goHome() {
100         Intent intent = new Intent(SplashActivity.this, MainActivity.class);
101         SplashActivity.this.startActivity(intent);
102         SplashActivity.this.finish();
103     }
104 
105     //跳转到初始页
106     private void goGuide() {
107         Intent intent = new Intent(SplashActivity.this, GuideActivity.class);
108         SplashActivity.this.startActivity(intent);
109         SplashActivity.this.finish();
110     }
111 
112 }

 2.简单的OnPageChangeListener运用,ViewPagerAdapter的layout文件和java代码。viewpager是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。ViewPager的适配器一般有两种,传入List<View> views 对应的adapter就是ViewPagerAdapter,如果传的是fragment[] framgments的话就是FragmentPagerAdapter或者FragmentStatePagerAdapter。我传的就是List<View>,所以用ViewPagerAdapter

<?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:orientation="vertical" >

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

   <!-- <LinearLayout
        android:id="@+id/ll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="24.0dp"
        android:orientation="horizontal" >
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/dot" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/dot" />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/dot" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/dot" />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/dot" />
    </LinearLayout> --> 

</RelativeLayout>
  1 package com.wym.dxdmallandroid;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import com.dxd.dxdmallandroid.R;
  7 import com.wym.splansh.adapter.ViewPagerAdapter;
  8 
  9 import android.app.Activity;
 10 import android.os.Bundle;
 11 import android.support.v4.view.ViewPager;
 12 import android.support.v4.view.ViewPager.OnPageChangeListener;
 13 import android.view.LayoutInflater;
 14 import android.view.View;
 15 
 16 /**
 17 * @Version 1.0
 18  * 
 19  * 
 20  */
 21 public class GuideActivity extends Activity implements OnPageChangeListener {
 22 
 23     private ViewPager vp;
 24     private ViewPagerAdapter vpAdapter;
 25     private List<View> views;
 26 
 27     // 底部小点图片
 28     //private ImageView[] dots;
 29 
 30     // 记录当前选中位置
 31     private int currentIndex;
 32 
 33     @Override
 34     protected void onCreate(Bundle savedInstanceState) {
 35         super.onCreate(savedInstanceState);
 36         setContentView(R.layout.guide);
 37         // 初始化页面
 38         initViews();
 39         // 初始化底部小点
 40         //initDots();
 41     }
 42 
 43     @SuppressWarnings("deprecation")
 44     private void initViews() {
 45         LayoutInflater inflater = LayoutInflater.from(this);
 46 
 47         views = new ArrayList<View>();
 48         // 初始化引导图片列表
 49         views.add(inflater.inflate(R.layout.what_new_one, null));
 50         views.add(inflater.inflate(R.layout.what_new_two, null));
 51         views.add(inflater.inflate(R.layout.what_new_three, null));
 52         views.add(inflater.inflate(R.layout.what_new_four, null));
 53         views.add(inflater.inflate(R.layout.what_new_five, null));
 54         // 初始化Adapter
 55         vpAdapter = new ViewPagerAdapter(views, this);
 56         
 57         vp = (ViewPager) findViewById(R.id.viewpager);
 58         vp.setAdapter(vpAdapter);
 59         // 绑定回调
 60         vp.setOnPageChangeListener(this);
 61     }
 62 
 63 //    private void initDots() {
 64 //        LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
 65 //
 66 //        dots = new ImageView[views.size()];
 67 //
 68 //        // 循环取得小点图片
 69 //        for (int i = 0; i < views.size(); i++) {
 70 //            dots[i] = (ImageView) ll.getChildAt(i);
 71 //            dots[i].setEnabled(true);// 都设为灰色
 72 //        }
 73 //
 74 //        currentIndex = 0;
 75 //        dots[currentIndex].setEnabled(false);// 设置为白色,即选中状态
 76 //    }
 77 
 78     private void setCurrentDot(int position) {
 79         if (position < 0 || position > views.size() - 1
 80                 || currentIndex == position) {
 81             return;
 82         }
 83 
 84 //        dots[position].setEnabled(false);
 85 //        dots[currentIndex].setEnabled(true);
 86 
 87         currentIndex = position;
 88     }
 89 
 90     // 当滑动状态改变时调用
 91     @Override
 92     public void onPageScrollStateChanged(int arg0) {
 93     }
 94 
 95     // 当当前页面被滑动时调用
 96     @Override
 97     public void onPageScrolled(int arg0, float arg1, int arg2) {
 98     }
 99 
100     // 当新的页面被选中时调用
101     @Override
102     public void onPageSelected(int arg0) {
103         // 设置底部小点选中状态
104         setCurrentDot(arg0);
105     }
106 
107 }
原文地址:https://www.cnblogs.com/wwym/p/6406511.html