欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

RxJava兩步打造華麗的Android引導(dǎo)頁

 更新時間:2016年07月27日 15:40:16   作者:簡書作者  
如今,移動應(yīng)用對首次使用的用戶呈現(xiàn)歡迎頁已經(jīng)越來越普遍了。這樣做的目的就是向用戶介紹并展示我們的應(yīng)用。本文給Android開發(fā)的引導(dǎo)頁面提供了很多參考,非常值得一讀。

前言

之前的一篇文章:基于RxJava實現(xiàn)酷炫啟動頁 中,我們嘗試了用RxJava實現(xiàn)酷炫的啟動頁,今天我們在此基礎(chǔ)上加入首次使用APP時的引導(dǎo)頁功能。

效果如下圖:

思路:思路其實很簡單,就是在WelcomeActivity setContentView()之前判斷是否是首次打開APP,若是,則去啟動引導(dǎo)頁(WelcomeGuideActivity)并return;若不是,則直接setContentView(),然后啟動動畫再啟動MainActivity

一、WelcomeActivity中判斷是否是第一次啟動

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 判斷是否是第一次開啟應(yīng)用
    boolean isFirstOpen = SharedPreferencesUtil.getBoolean(this, SharedPreferencesUtil.FIRST_OPEN, true);
    // 如果是第一次啟動,則先進(jìn)入功能引導(dǎo)頁
    if (isFirstOpen) {
      Intent intent = new Intent(this, WelcomeGuideActivity.class);
      startActivity(intent);
      finish();
      return;
    }

    // 如果不是第一次啟動app,則正常顯示啟動屏
    setContentView(R.layout.activity_welcome);
    ButterKnife.bind(this);
    startMainActivity();
  }

我們判斷是否是第一次打開APP是用了SharedPreferences,我們這里對他進(jìn)行了一下簡單封裝,代碼如下:

/**
 * Created by xialo on 2016/7/25.
 */
public class SharedPreferencesUtil {

  private static final String spFileName = "welcomePage";
  public static final String FIRST_OPEN = "first_open";

  public static Boolean getBoolean(Context context, String strKey,
                   Boolean strDefault) {//strDefault  boolean: Value to return if this preference does not exist.
    SharedPreferences setPreferences = context.getSharedPreferences(
        spFileName, Context.MODE_PRIVATE);
    Boolean result = setPreferences.getBoolean(strKey, strDefault);
    return result;
  }

  public static void putBoolean(Context context, String strKey,
                 Boolean strData) {
    SharedPreferences activityPreferences = context.getSharedPreferences(
        spFileName, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = activityPreferences.edit();
    editor.putBoolean(strKey, strData);
    editor.commit();
  }

}

二、WelcomeGuideActivity中,我們使用ViewPager以加載多個引導(dǎo)頁面使其可以左右滑動

不多說,請看WelcomeGuideActivity.java代碼:

/**
 * Created by xialo on 2016/7/25.
 */
public class WelcomeGuideActivity extends Activity implements View.OnClickListener {
  private ViewPager vp;
  private GuideViewPagerAdapter adapter;
  private List<View> views;
  private Button startBtn;

  // 引導(dǎo)頁圖片資源
  private static final int[] pics = { R.layout.guide_view1,
      R.layout.guide_view2, R.layout.guide_view3};

  // 底部小點(diǎn)圖片
  private ImageView[] dots;

  // 記錄當(dāng)前選中位置
  private int currentIndex;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_guide);

    views = new ArrayList<View>();

    // 初始化引導(dǎo)頁視圖列表
    for (int i = 0; i < pics.length; i++) {
      View view = LayoutInflater.from(this).inflate(pics[i], null);

      if (i == pics.length - 1) {
        startBtn = (Button) view.findViewById(R.id.btn_enter);
        startBtn.setTag("enter");
        startBtn.setOnClickListener(this);
      }

      views.add(view);

    }

    vp = (ViewPager) findViewById(R.id.vp_guide);
    adapter = new GuideViewPagerAdapter(views);
    vp.setAdapter(adapter);
    vp.addOnPageChangeListener(new PageChangeListener());

    initDots();

  }

  @Override
  protected void onResume() {
    super.onResume();
  }

  @Override
  protected void onPause() {
    super.onPause();
    // 如果切換到后臺,就設(shè)置下次不進(jìn)入功能引導(dǎo)頁
    SharedPreferencesUtil.putBoolean(WelcomeGuideActivity.this, SharedPreferencesUtil.FIRST_OPEN, false);
    finish();
  }

  @Override
  protected void onStop() {
    super.onStop();
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
  }

  private void initDots() {
    LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
    dots = new ImageView[pics.length];

    // 循環(huán)取得小點(diǎn)圖片
    for (int i = 0; i < pics.length; i++) {
      // 得到一個LinearLayout下面的每一個子元素
      dots[i] = (ImageView) ll.getChildAt(i);
      dots[i].setEnabled(false);// 都設(shè)為灰色
      dots[i].setOnClickListener(this);
      dots[i].setTag(i);// 設(shè)置位置tag,方便取出與當(dāng)前位置對應(yīng)
    }

    currentIndex = 0;
    dots[currentIndex].setEnabled(true); // 設(shè)置為白色,即選中狀態(tài)

  }

  /**
   * 設(shè)置當(dāng)前view
   *
   * @param position
   */
  private void setCurView(int position) {
    if (position < 0 || position >= pics.length) {
      return;
    }
    vp.setCurrentItem(position);
  }

  /**
   * 設(shè)置當(dāng)前指示點(diǎn)
   *
   * @param position
   */
  private void setCurDot(int position) {
    if (position < 0 || position > pics.length || currentIndex == position) {
      return;
    }
    dots[position].setEnabled(true);
    dots[currentIndex].setEnabled(false);
    currentIndex = position;
  }

  @Override
  public void onClick(View v) {
    if (v.getTag().equals("enter")) {
      enterMainActivity();
      return;
    }

    int position = (Integer) v.getTag();
    setCurView(position);
    setCurDot(position);
  }


  private void enterMainActivity() {
    Intent intent = new Intent(WelcomeGuideActivity.this,
        WelcomeActivity.class);
    startActivity(intent);
    SharedPreferencesUtil.putBoolean(WelcomeGuideActivity.this, SharedPreferencesUtil.FIRST_OPEN, false);
    finish();
  }

  private class PageChangeListener implements ViewPager.OnPageChangeListener {
    @Override
    public void onPageScrollStateChanged(int position) {

    }

    @Override
    public void onPageScrolled(int position, float arg1, int arg2) {

    }

    @Override
    public void onPageSelected(int position) {
      // 設(shè)置底部小點(diǎn)選中狀態(tài)
      setCurDot(position);
    }

  }
}

我們用了三個頁面guide_view1、guide_view2、guide_view3作為引導(dǎo)頁面,布局類似,只是guide_view3多了個點(diǎn)擊進(jìn)入的Button

以下是guide_view3.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >

  <ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:src="@mipmap/guide_img3" />
  <Button
    android:id="@+id/btn_enter"
    android:layout_width="100dp"
    android:layout_height="26dp"
    android:layout_gravity="bottom|center_horizontal"
    android:layout_marginBottom="75dp"
    android:background="@drawable/button_shape"
    android:text="@string/entry"
    android:textColor="@color/white"
    android:textSize="18sp"
    android:visibility="visible" />

</FrameLayout>

WelcomeGuideActivity中值得注意的是該Button點(diǎn)擊事件的處理,在點(diǎn)擊Button后我們并沒有直接進(jìn)入MainActivity,而是先把SharedPreferences中標(biāo)記是否第一次進(jìn)入的布爾值設(shè)為false,而后再次進(jìn)入WelcomeActivity,此時WelcomeActivity會直接setContentView()然后啟動動畫,進(jìn)入MainActivity。

以上,我們?nèi)A麗麗的引導(dǎo)頁就完成了。希望本文中能對你的引導(dǎo)頁提供幫助,和在大家學(xué)習(xí)Android開發(fā)中有所參考,謝謝大家對腳本之家的支持。

相關(guān)文章

  • android 如何獲取MCC/MNC控制小區(qū)廣播的開啟

    android 如何獲取MCC/MNC控制小區(qū)廣播的開啟

    獲取MCC/MNC以便控制小區(qū)廣播的開啟下面針對于單卡、雙卡,為大家詳細(xì)介紹下具體的實現(xiàn),感興趣的朋友可以參考下哈
    2013-06-06
  • Android學(xué)習(xí)之介紹Binder的簡單使用

    Android學(xué)習(xí)之介紹Binder的簡單使用

    BInder方面的資料雖然感覺看的比較多,但是真正用的時候才發(fā)現(xiàn)有很多地方模棱兩棵的,所以,打算用一個實例再來鞏固一下binder的使用方法。這篇文章主要介紹了Android中Binder的簡單使用,文中給出詳細(xì)的示例代碼,需要的朋友可以參考下
    2016-12-12
  • 深入解析Android中View創(chuàng)建的全過程

    深入解析Android中View創(chuàng)建的全過程

    這篇文章主要給大家深入的解析了關(guān)于Android中View創(chuàng)建的全過程,文中介紹的非常詳細(xì),相信對大家會有一定的參考借鑒,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-03-03
  • Android Shader應(yīng)用開發(fā)之雷達(dá)掃描效果

    Android Shader應(yīng)用開發(fā)之雷達(dá)掃描效果

    這篇文章主要為大家詳細(xì)介紹了Android Shader應(yīng)用開發(fā)之雷達(dá)掃描效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • android使用ExpandableListView控件實現(xiàn)小說目錄效果的例子

    android使用ExpandableListView控件實現(xiàn)小說目錄效果的例子

    這篇文章主要介紹了android使用ExpandableListView控件實現(xiàn)小說目錄效果的例子,還可以實現(xiàn)二級列表展示效果,需要的朋友可以參考下
    2014-07-07
  • Android 4.4.2 橫屏應(yīng)用隱藏狀態(tài)欄和底部虛擬鍵的方法

    Android 4.4.2 橫屏應(yīng)用隱藏狀態(tài)欄和底部虛擬鍵的方法

    這篇文章主要介紹了Android 4.4.2 橫屏應(yīng)用隱藏狀態(tài)欄和底部虛擬鍵的方法,需要的朋友可以參考下
    2017-01-01
  • Android?Studio調(diào)試Gradle插件詳情

    Android?Studio調(diào)試Gradle插件詳情

    這篇文章主要介紹了Android?Studio調(diào)試Gradle插件詳情,文章圍繞主題展開詳細(xì)的內(nèi)容戒殺,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Android入門之Service的使用詳解

    Android入門之Service的使用詳解

    我們的Android在啟動一些長事務(wù)時都會使用異步,很多初學(xué)者覺得這個異步就是一個異步線程+Handler而己。如果你這么想就錯了。這一切其實靠的正是Android里的Service。本文就來和大家聊聊Service的生命周期和使用,需要的可以參考一下
    2022-12-12
  • Android App開發(fā)中Gradle構(gòu)建過程的配置方法

    Android App開發(fā)中Gradle構(gòu)建過程的配置方法

    這篇文章主要介紹了Android App開發(fā)中Gradle構(gòu)建過程的配置方法,包括在Gradle中配置manifest的方法,需要的朋友可以參考下
    2016-06-06
  • Android打造流暢九宮格抽獎活動效果

    Android打造流暢九宮格抽獎活動效果

    抽獎活動有很多種形式,轉(zhuǎn)盤抽獎,九宮格抽獎,刮刮卡抽獎,這篇文章主要為大家詳細(xì)介紹了如何打造流暢九宮格抽獎活動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評論