viewpage做欢迎页

来源:互联网 发布:nginx 无法访问端口 编辑:程序博客网 时间:2024/06/14 09:12
以下使用ViewPager来实现一个程序引导的demo:
 一般来说,引导界面是出现第一次执行时出现的,之后不会再出现。所以须要记录是否是第一次使用程序,办法有非常多,最easy想到的就是使用SharedPreferences来保存。过程例如以下:
  1、程序进入欢迎界面,SplashActivity,在这里读取SharedPreferences里面的变量,先设置为true。进入引导界面,然后设置为false。
  2、之后每次进入欢迎界面读取SharedPreferences里面的变量,由于是false,所以不会执行引导界面了。
代码例如以下:
SplashActivity.java,欢迎界面。
import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Handler;import android.os.Message;/** */public class SplashActivity extends Activity {boolean isFirstIn = false;private static final int GO_HOME = 1000;private static final int GO_GUIDE = 1001;// 延迟3秒private static final long SPLASH_DELAY_MILLIS = 3000;private static final String SHAREDPREFERENCES_NAME = "first_pref";/** * Handler:跳转到不同界面 */private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case GO_HOME:goHome();break;case GO_GUIDE:goGuide();break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.splash);init();}private void init() {// 读取SharedPreferences中须要的数据// 使用SharedPreferences来记录程序的使用次数SharedPreferences preferences = getSharedPreferences(SHAREDPREFERENCES_NAME, MODE_PRIVATE);// 取得对应的值,假设没有该值,说明还未写入,用true作为默认值isFirstIn = preferences.getBoolean("isFirstIn", true);// 推断程序与第几次执行,假设是第一次执行则跳转到引导界面,否则跳转到主界面if (!isFirstIn) {// 使用Handler的postDelayed方法,3秒后执行跳转到MainActivitymHandler.sendEmptyMessageDelayed(GO_HOME, SPLASH_DELAY_MILLIS);} else {mHandler.sendEmptyMessageDelayed(GO_GUIDE, SPLASH_DELAY_MILLIS);}}private void goHome() {Intent intent = new Intent(SplashActivity.this, MainActivity.class);SplashActivity.this.startActivity(intent);SplashActivity.this.finish();}private void goGuide() {Intent intent = new Intent(SplashActivity.this, GuideActivity.class);SplashActivity.this.startActivity(intent);SplashActivity.this.finish();}}
GuideActivity.java引导界面:
import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import cn.eoe.leigo.splash.adapter.ViewPagerAdapter;/** *  *  */public class GuideActivity extends Activity implements OnPageChangeListener {private ViewPager vp;private ViewPagerAdapter vpAdapter;private List<View> views;// 底部小点图片private ImageView[] dots;// 记录当前选中位置private int currentIndex;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.guide);// 初始化页面initViews();// 初始化底部小点initDots();}private void initViews() {LayoutInflater inflater = LayoutInflater.from(this);views = new ArrayList<View>();// 初始化引导图片列表views.add(inflater.inflate(R.layout.what_new_one, null));views.add(inflater.inflate(R.layout.what_new_two, null));views.add(inflater.inflate(R.layout.what_new_three, null));views.add(inflater.inflate(R.layout.what_new_four, null));// 初始化AdaptervpAdapter = new ViewPagerAdapter(views, this);vp = (ViewPager) findViewById(R.id.viewpager);vp.setAdapter(vpAdapter);// 绑定回调vp.setOnPageChangeListener(this);}private void initDots() {LinearLayout ll = (LinearLayout) findViewById(R.id.ll);dots = new ImageView[views.size()];// 循环取得小点图片for (int i = 0; i < views.size(); i++) {dots[i] = (ImageView) ll.getChildAt(i);dots[i].setEnabled(true);// 都设为灰色}currentIndex = 0;dots[currentIndex].setEnabled(false);// 设置为白色,即选中状态}private void setCurrentDot(int position) {if (position < 0 || position > views.size() - 1|| currentIndex == position) {return;}dots[position].setEnabled(false);dots[currentIndex].setEnabled(true);currentIndex = position;}// 当滑动状态改变时调用@Overridepublic void onPageScrollStateChanged(int arg0) {}// 当当前页面被滑动时调用@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}// 当新的页面被选中时调用@Overridepublic void onPageSelected(int arg0) {// 设置底部小点选中状态setCurrentDot(arg0);}}
ViewPagerAdapter.java。ViewPager的适配器:
import java.util.List;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import cn.eoe.leigo.splash.MainActivity;import cn.eoe.leigo.splash.R;/** */public class ViewPagerAdapter extends PagerAdapter {// 界面列表private List<View> views;private Activity activity;private static final String SHAREDPREFERENCES_NAME = "first_pref";public ViewPagerAdapter(List<View> views, Activity activity) {this.views = views;this.activity = activity;}// 销毁arg1位置的界面@Overridepublic void destroyItem(View arg0, int arg1, Object arg2) {((ViewPager) arg0).removeView(views.get(arg1));}@Overridepublic void finishUpdate(View arg0) {}// 获得当前界面数@Overridepublic int getCount() {if (views != null) {return views.size();}return 0;}// 初始化arg1位置的界面@Overridepublic Object instantiateItem(View arg0, int arg1) {((ViewPager) arg0).addView(views.get(arg1), 0);if (arg1 == views.size() - 1) {ImageView mStartWeiboImageButton = (ImageView) arg0.findViewById(R.id.iv_start_weibo);mStartWeiboImageButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 设置已经引导setGuided();goHome();}});}return views.get(arg1);}private void goHome() {// 跳转Intent intent = new Intent(activity, MainActivity.class);activity.startActivity(intent);activity.finish();}/** *  * method desc:设置已经引导过了,下次启动不用再次引导 */private void setGuided() {SharedPreferences preferences = activity.getSharedPreferences(SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE);Editor editor = preferences.edit();// 存入数据editor.putBoolean("isFirstIn", false);// 提交改动editor.commit();}// 推断是否由对象生成界面@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return (arg0 == arg1);}@Overridepublic void restoreState(Parcelable arg0, ClassLoader arg1) {}@Overridepublic Parcelable saveState() {return null;}@Overridepublic void startUpdate(View arg0) {}}
0 0
原创粉丝点击