实现原理:
用SharedPreferences实现。
创建一个boolean的变量,默认值为true。
当判断这个变量是true的时候,说明是第一次运行,就跳转到另一个引导页面,否则进入主页面。
引导页面跳转到最后一张图片时,点击某按钮发生跳转事件,回到MainActivity,此时把变量的值改成false。
引导图效果用ViewPager实现。
下面附上代码:
splash.xml:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.zn.Activity.SplashActivity"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:adjustViewBounds="true" android:background="@drawable/w01" android:scaleType="centerCrop" /> </RelativeLayout> guid.xml: <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.zn.Activity.GuidActivity"><android.support.v4.view.ViewPager android:id="@+id/guid_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true"></android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/viewgroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="38.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" /> </LinearLayout></RelativeLayout>引导页布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" android:adjustViewBounds="false" android:focusable="true" android:scaleType="centerCrop" android:background="@drawable/guide01"/></LinearLayout>
闪屏页activity:
package com.zn.Activity; import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Window; /** * Created by admin on 2016/8/3. */public class SplashActivity extends Activity { boolean isFirstIn = false; private static final int GO_HOME = 1000; private static final int GO_GUIDE = 1001; private static final long SPLASH_DELAY_MILLIS = 1000; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case GO_HOME: goHome(); break; case GO_GUIDE: goGuide(); break; } super.handleMessage(msg); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);//去标题栏 setContentView(R.layout.activity_splash); init(); } private void init() { // 读取SharedPreferences中需要的数据 // 使用SharedPreferences来记录程序的使用次数 SharedPreferences preferences = getSharedPreferences( Icontes.SHAREDPREFERENCES_NAME, MODE_PRIVATE); // 取得相应的值,如果没有该值,说明还未写入,用true作为默认值 isFirstIn = preferences.getBoolean("isFirstIn", true); // 判断程序与第几次运行,如果是第一次运行则跳转到引导界面,否则跳转到主界面 if (!isFirstIn) { // 使用Handler的postDelayed方法,1秒后执行跳转到MainActivity mHandler.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, GuidActivity.class); SplashActivity.this.startActivity(intent); SplashActivity.this.finish(); }}引导页activity:
package com.zn.Activity; import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout; import com.zn.Adapter.ViewPagerApter; import java.util.ArrayList;import java.util.List; public class GuidActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{ private ViewPager viewPager; private ViewPagerApter viewPagerApter; private List<View> views; //底部小圆点图片 private ImageView[] dots; //记录当前选中的位置 private int currentIndex; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_guid); //初始化页面 initViews(); //初始化底部小圆点 initDots(); } private void initViews(){ LayoutInflater inflater=LayoutInflater.from(this); views=new ArrayList<View>(); //初始化引导页图片列表 views.add(inflater.inflate(R.layout.layout_item1,null)); views.add(inflater.inflate(R.layout.layout_item2,null)); views.add(inflater.inflate(R.layout.layout_item5,null)); //初始化Adapter viewPagerApter=new ViewPagerApter(views,this); viewPager= (ViewPager) findViewById(R.id.guid_viewpager); viewPager.setAdapter(viewPagerApter); //绑定回调 viewPager.setOnPageChangeListener(this); } private void initDots(){ LinearLayout linearLayout= (android.widget.LinearLayout) findViewById(R.id.viewgroup); dots=new ImageView[views.size()]; //循环获取小点的图片 for (int i=0;i<views.size();i++){ dots[i]= (ImageView) linearLayout.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; } //当前页面滑动时调用 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } //当前页面选中时调用 @Override public void onPageSelected(int position) { //设置底部小圆点选中状态 setCurrentDot(position); } //滑动状态改变时调用 @Override public void onPageScrollStateChanged(int state) { }}适配器:
package com.zn.Adapter; import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView; import com.zn.Activity.Icontes;import com.zn.Activity.MainActivity;import com.zn.Activity.R; import java.util.List; /** * Created by admin on 2016/8/3. */public class ViewPagerApter extends PagerAdapter { private List<View> views; private Activity activity; public ViewPagerApter(List<View> views, Activity activity) { this.views = views; this.activity = activity; } //销毁position位置的界面 @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView(views.get(position)); } //获得当前的页面数 @Override public int getCount() { if (views != null) { return views.size(); } return 0; } @Override public void finishUpdate(ViewGroup container) { } //初始化position的界面 @Override public Object instantiateItem(ViewGroup container, int position) { ((ViewPager) container).addView(views.get(position), 0); if (position == views.size() - 1) { ImageView mStartWeiboImageButton = (ImageView) container.findViewById(R.id.iv_start_weibo); mStartWeiboImageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //设置已经引导 setGuided(); SharedPreferences preferences = activity.getSharedPreferences( Icontes.SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean("isFirstIn", false); editor.commit(); goHome(); } }); } return views.get(position); } private void goHome() { //跳转 Intent intent = new Intent(activity, MainActivity.class); activity.startActivity(intent); activity.finish(); } private void setGuided() { SharedPreferences preferences = activity.getSharedPreferences(Icontes.SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); //存入数据 editor.putBoolean("isFirstIn", false); //提交修改 editor.commit(); } //判断是否由对象生成界面 @Override public boolean isViewFromObject(View view, Object object) { return (view == object); } @Override public void restoreState(Parcelable state, ClassLoader loader) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(ViewGroup container) { }}小圆点xml:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/dark_dot" android:state_enabled="true"/> <item android:drawable="@drawable/white_dot" android:state_enabled="false"/> </selector> 开始体验按钮:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/tiyan" /> <item android:drawable="@drawable/tiyan" /></selector>
时间: 2024-10-21 23:35:21