1. 程式人生 > >倒計時5秒跳轉

倒計時5秒跳轉

package net.bwie.splashactivitydemo.activity;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import net.bwie.splashactivitydemo.R;

/**
 * 歡迎頁
 * 1、倒計時變成0時,自動跳轉:Handler、Timer、CountDownTimer
 * 2、SharedPreferences記錄是否首次啟動app:首次跳轉引導頁,否則跳轉主頁
 */
public class SplashActivity extends AppCompatActivity {

    public static final int MSG_UPDATE_TIME = 1;

    // 時間間隔1s
    public static final int INTERNAL_TIME = 1000;

    // 配置檔名
    public static final String CONGIF_NAME = "app_config";

    // 配置檔案中的一個配置項:是否首次啟動
    public static final String IS_FIRST_LOGIN = "is_first_login";

    // 倒計時,初始5s
    private int mCountDownTime = 5;

    protected TextView mCountDownTv;

    private Handler mHandler = new Handler(new Handler.Callback() {

        // 接收發送的訊息
        @Override
        public boolean handleMessage(Message msg) {
            switch (msg.what) {
                case MSG_UPDATE_TIME:// 更新時間

                    if (mCountDownTime > 0) {
                        mCountDownTv.setText(--mCountDownTime + "s");
                        // 每次更新完UI介面,都會在1s後傳送訊息,通知繼續下一次的更新
                        mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIME, INTERNAL_TIME);
                    } else {
//                        Toast.makeText(SplashActivity.this, "OK", Toast.LENGTH_SHORT).show();
                        startOtherActivity();
                    }
                    break;
            }
            return true;
        }
    });

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

        // 使用handler每隔1s傳送一次訊息,通知textView重新整理UI介面
        mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIME, INTERNAL_TIME);
    }

    private void initView() {
        mCountDownTv = (TextView) findViewById(R.id.count_down_tv);
    }

    // 跳轉介面
    private void startOtherActivity() {
        SharedPreferences sharedPreferences =
                this.getSharedPreferences(CONGIF_NAME, Context.MODE_PRIVATE);

        // 每次啟動app都要檢查是否首次啟動
        boolean isFirstLogin = sharedPreferences.getBoolean(IS_FIRST_LOGIN, true);
        // 跳轉
        Intent intent = new Intent();
        if (isFirstLogin) {// 跳轉引導頁
            intent.setClass(this, GuideActivity.class);
            // 從此不再是首次啟動
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putBoolean(IS_FIRST_LOGIN, false);
            editor.commit();
        } else {// 跳轉主介面
            intent.setClass(this, MainActivity.class);
        }
        startActivity(intent);
        // 關閉當前頁面
        finish();
    }

}
package net.bwie.splashactivitydemo.activity;

import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.LinearLayout;

import net.bwie.splashactivitydemo.R;
import net.bwie.splashactivitydemo.adapter.GuidePagerAdapter;
import net.bwie.splashactivitydemo.fragment.GuideFragment;

import java.util.ArrayList;
import java.util.List;

/**
 * 1、實現ViewPager
 * 2、實現小圓點
 * 3、小圓點展示對應頁
 */
public class GuideActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {

    protected ViewPager mGuideViewPager;

    // Fragment集合
    private List<GuideFragment> mFragmentList;
    // 小圓點集合
    private List<ImageView> mPointList;

    // 3個圖片id
    private int[] imgIds = new int[]
            {R.drawable.guide_first, R.drawable.guide_second, R.drawable.guide_third};

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

    private void initView() {
        mGuideViewPager = (ViewPager) findViewById(R.id.guide_view_pager);
        LinearLayout pointContainer = (LinearLayout) findViewById(R.id.point_container);

        mFragmentList = new ArrayList<>();
        mPointList = new ArrayList<>();

        // 佈局引數,可以指定寬高、權重等資訊
        // 檢視所在容器是什麼,就選擇對應的LayoutParams
        LinearLayout.LayoutParams params =
                new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
        for (int imgId : imgIds) {// 3
            // 例項化Fragment
            GuideFragment guideFragment = GuideFragment.newInstance(imgId);
            mFragmentList.add(guideFragment);

            // 例項化小圓點
            ImageView pointImageView = new ImageView(this);
            pointImageView.setImageResource(R.drawable.selector_point);
            // 給子控制元件設定佈局引數
            pointImageView.setLayoutParams(params);
            // 向容器中新增子檢視:小圓點
            pointContainer.addView(pointImageView);
            mPointList.add(pointImageView);
        }
        // 初始化第一個小圓點為選中狀態,即白色
        mPointList.get(0).setSelected(true);
        // 最後一個碎片設定按鈕可見
        mFragmentList.get(mFragmentList.size() - 1).setShowBtn(true);

        GuidePagerAdapter adapter =
                new GuidePagerAdapter(getSupportFragmentManager(), mFragmentList);

        mGuideViewPager.setAdapter(adapter);
        mGuideViewPager.addOnPageChangeListener(this);
    }

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

    }

    @Override
    public void onPageSelected(int position) {
        // 遍歷全部小圓點,當前展示頁對應的點設定為白色,其他圓點一律設定為灰色
        for (int i = 0; i < mPointList.size(); i++) {
            mPointList.get(i).setSelected(i == position);
        }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}
package net.bwie.splashactivitydemo.adapter;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import net.bwie.splashactivitydemo.fragment.GuideFragment;

import java.util.List;

/**
 * 引導頁對應的介面卡
 */
public class GuidePagerAdapter extends FragmentPagerAdapter {

    private List<GuideFragment> mFragmentList;

    public GuidePagerAdapter(FragmentManager fm, List<GuideFragment> fragmentList) {
        super(fm);
        this.mFragmentList = fragmentList;
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }
}
package net.bwie.splashactivitydemo.fragment;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;

import net.bwie.splashactivitydemo.R;
import net.bwie.splashactivitydemo.activity.MainActivity;

public class GuideFragment extends Fragment implements View.OnClickListener {

    private int mResId;
    // 是否展示立即體驗按鈕
    private boolean mIsShowBtn;

    // 用於在外部建立Fragment的例項,而且可以傳遞引數
    public static GuideFragment newInstance(int resId) {
        Bundle args = new Bundle();
        args.putInt("resId", resId);
        GuideFragment fragment = new GuideFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mResId = getArguments()
                .getInt("resId");
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_guide, container, false);
        ImageView guideImageView = (ImageView) rootView.findViewById(R.id.guide_image_view);
        guideImageView.setImageResource(mResId);
        if (mIsShowBtn) {
            Button startMainBtn = (Button) rootView.findViewById(R.id.start_main_btn);
            startMainBtn.setOnClickListener(this);
            // 設定可見
            startMainBtn.setVisibility(View.VISIBLE);
        }
        return rootView;
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(getContext(), MainActivity.class);
        startActivity(intent);
        getActivity().finish();
    }

    public void setShowBtn(boolean showBtn) {
        mIsShowBtn = showBtn;
    }
}