Android如何实现引导页
16lz
2021-01-26
需要添加三个后台文件
SplashActivity(判断是否是第一次登陆)WelcomeActivity(引导页)ViewPagerAdapter(ViewPager控件适配器)
ViewPager是一种通过添加视图来实现左右滑动的控件,非常适合用来做引导页。
在应用第一次开启时,首先进入SplashActivity页面,通过SharePreferences存储判断登陆的布尔类型值判断用户是否是第一次打开应用,若是,跳转至引导页,否则直接跳到登陆页面。
在引导页面,使用ViewPager的addView(View v)方法添加多个视图,并且添加OnPageChangeListener监听器来监听用户的手势滑动,通过指定方法获取视图索引,从而实现视图切换。
话不多说,直接上代码:
SplashActivity
public class SplashActivity extends Activity {private Context context;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);context=SplashActivity.this;boolean isFirstOpen=SharePerferenceUtil.IsFirstLogin(context);if(!isFirstOpen){//不是第一次登陆Intent intent=new Intent(context,LoginActivity.class);startActivity(intent);finish();return;}setContentView(R.layout.activity_splash);new Handler().postDelayed(new Runnable() {//第一次登陆时1秒后跳到引导页@Overridepublic void run() {Intent intent=new Intent(context,WelcomeActivity.class);startActivity(intent);finish();overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);}}, 1000);}}
ViewPagerAdapter
public class ViewPagerAdapter extends PagerAdapter {private List views;public ViewPagerAdapter(List views2){this.views=views2;}//获得视图总数@Overridepublic int getCount() {if(views!=null){return views.size();}return 0;}//判断是否由对象生成视图@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return (arg0==arg1);}//初始化position位置的视图@Overridepublic Object instantiateItem(View container, int position) {((ViewPager)container).addView(views.get(position), 0);return views.get(position);}//销毁position位置的视图@Overridepublic void destroyItem(View container, int position, Object object) {((ViewPager)container).removeView(views.get(position));}}
WelcomeActivity
public class WelcomeActivity extends Activity implements OnClickListener,OnPageChangeListener{private ViewPager viewPager;private LinearLayout pointLayout;private ViewPagerAdapter adapter;private List views;private Button startBtn;private int[] guidePics = { R.layout.view_guide1, R.layout.view_guide2,R.layout.view_guide3 };//引导页中的三张图片布局private ImageView[] dots;//代表视图索引的圆圈private int currentIndex;//表示前一个视图的索引private Context context;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_welcome);context = WelcomeActivity.this;if (Build.VERSION.SDK_INT >= 19) {// android 4.4 以上 沉浸式状态栏Window window = getWindow();window.addFlags(67108864);}AndroidBug5497Workaround.assistActivity(WelcomeActivity.this);//解决沉浸式bugviewPager = (ViewPager) findViewById(R.id.viewPager);pointLayout=(LinearLayout) findViewById(R.id.pointLayout);views = new ArrayList();initGuidePage();setViewPagerAdapter();initDots();}@Overrideprotected void onPause() {super.onPause();// 如果切换到后台,就设置下次不进入功能引导页// SharePerferenceUtil.setFirstLogin(context, false);}//初始化引导页视图private void initGuidePage() {for (int i = 0; i < guidePics.length; i++) {View view=LayoutInflater.from(context).inflate(guidePics[i], null);if(i==guidePics.length-1){startBtn=(Button) view.findViewById(R.id.btnStart);startBtn.setTag("start");startBtn.setOnClickListener(this);}views.add(view);}}//设置ViewPager适配器private void setViewPagerAdapter() {adapter=new ViewPagerAdapter(views);viewPager.setAdapter(adapter);viewPager.setOnPageChangeListener(this);}//初始化圆圈private void initDots() {dots=new ImageView[guidePics.length];for (int i = 0; i < guidePics.length; i++) {dots[i]=(ImageView) pointLayout.getChildAt(i);dots[i].setEnabled(true);dots[i].setOnClickListener(this);dots[i].setTag(i);}currentIndex=0;dots[currentIndex].setEnabled(false);}@Overridepublic void onClick(View v) {if(v.getTag().equals("start")){enterToLoginActivity();//点击“立即开启” 进入登陆页面return;}//圆圈点击后执行int position=(Integer) v.getTag();setCurrentView(position);setCurrentDot(position);}//设置当前视图private void setCurrentView(int position) {if(position<0||position>guidePics.length-1){return;}viewPager.setCurrentItem(position);}//设置当前圆圈状态private void setCurrentDot(int position) {if(position<0||position>guidePics.length-1||currentIndex==position){return;}dots[position].setEnabled(false);dots[currentIndex].setEnabled(true);currentIndex=position;}//通过SplashActivity中转进入LoginActivityprivate void enterToLoginActivity() {Intent intent=new Intent(context,SplashActivity.class);startActivity(intent);SharePerferenceUtil.setFirstLogin(context, false);//设置不是第一次登陆finish();overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);}@Overridepublic void onPageScrollStateChanged(int arg0) {// arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// arg0 :当前页面,及你点击滑动的页面 // arg1:当前页面偏移的百分比 // arg2:当前页面偏移的像素位置}@Overridepublic void onPageSelected(int position) {setCurrentDot(position);//设置圆圈状态}}
引导页布局文件
< 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.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"/ > < LinearLayout android:id="@+id/pointLayout"android:layout_width="wrap_content"android:layout_height="wrap_content" android:layout_alignParentBottom="true"android:layout_centerHorizontal="true" android:layout_marginBottom="40dp" android:orientation="horizontal"> 底部的三个小圆圈 < ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="15dp" android:src="@drawable/point_bg"/ > < ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="15dp" android:src="@drawable/point_bg"/ > < ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="15dp" android:src="@drawable/point_bg"/ > < /LinearLayout>< /RelativeLayout>
引导页视图(三个),这里仅贴出最后一个视图布局
< RelativeLayout 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:src="@drawable/guide_3" android:scaleType="fitXY" / > < Button android:id="@+id/btnStart" android:layout_width="200dp" android:layout_height="50dp" android:text="立即开启" android:textColor="@color/orange_express" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:layout_marginBottom="150dp" android:background="@drawable/startbtn_bg"/>< /RelativeLayout>
更多相关文章
- FAQ_11_解决ADT的Logcat罢工问题
- android TextView EditTextView一些技巧使用 (视图代码布局)
- android 常用控件
- Android(安卓)中文 API(123) ―― AbsListView(二)
- Android复写BaseAdapter并显示ListView视图
- Android实现图片轮播切换实例代码
- Android(安卓)Studio TV开发教程(十)添加引导步骤
- Android(安卓)软键盘弹出时,EditText固定在键盘上方
- Android(安卓)- MVC、MVP与MVVM架构