倒計時5秒跳轉
阿新 • • 發佈:2019-01-23
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; } }