使用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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM