ViewPager简单使用----实现应用欢迎页--->引导页--->主页面
引导页是基本每个应用都配备的页面,网上也有很多,但有些不全,有些太简单!所以自己总结了一下给大家参考,也方便自己以后随时嵌套使用.这只是随手弄的,代码不太规范,有需要自己调整修改!不多废话,进入正题(直接将代码复制到相应地方,改了图片就能起飞,注释还算详细,自己看吧):
首先是欢迎页WelcomeActivity:
这里的SharedPreferences是用来判断是否第一次启动应用的,是就进入引导页,否就直接进入主页面
package com.sunapollo.myapplication; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.view.Window; import android.view.WindowManager; public class WelcomeActivity extends Activity{ boolean isFirstIn = false; Intent intent; /* * 这个Activiyt是程序启动画面,也就是一个图片。在这个Activity里使用了Handler一秒后会进入到引导Activity里面。 */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏,注意一定要在绘制view之前调用这个方法,不然会出现 setContentView(R.layout.welcome); SharedPreferences preferences = getSharedPreferences("first_pref", MODE_PRIVATE); isFirstIn = preferences.getBoolean("isFirstIn", true); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); //全屏显示 new Handler().postDelayed(new Runnable(){ public void run(){ if (isFirstIn) { // start GuideActivity intent = new Intent(WelcomeActivity.this, GuideActivity.class); } else { // start MainActivity intent = new Intent (WelcomeActivity.this,MainActivity.class); } WelcomeActivity.this.startActivity(intent); WelcomeActivity.this.finish(); } }, 1000); } }
布局文件(welcome.xml)就这么简单粗暴,一个图片:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/aaa"> </LinearLayout>
如果是第一次进入应用,那么就会跳转到导航页面GuideActivity:
package com.sunapollo.myapplication; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import java.io.InputStream; import java.util.ArrayList; import java.util.List; /** * 实现首次启动的引导页面 */ public class GuideActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{ private ViewPager vp; private int []imageIdArray;//图片资源的数组 private List<View> viewList;//图片资源的集合 private ViewGroup vg;//放置圆点 //实例化原点View private ImageView iv_point; private ImageView []ivPointArray; //最后一页的按钮 private ImageButton ib_start; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.view_pager); //标记是否首次启动 SharedPreferences preferences = getSharedPreferences( "first_pref", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean("isFirstIn", false); editor.commit(); ib_start = (ImageButton) findViewById(R.id.guide_ib_start); ib_start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(GuideActivity.this,MainActivity.class)); finish(); } }); //加载ViewPager initViewPager(); //加载底部圆点 initPoint(); } /** * 加载底部圆点 */ private void initPoint() { //这里实例化LinearLayout vg = (ViewGroup) findViewById(R.id.guide_ll_point); //根据ViewPager的item数量实例化数组 ivPointArray = new ImageView[viewList.size()]; //循环新建底部圆点ImageView,将生成的ImageView保存到数组中 int size = viewList.size(); for (int i = 0;i<size;i++){ iv_point = new ImageView(this); iv_point.setLayoutParams(new ViewGroup.LayoutParams(20,20)); iv_point.setPadding(30,0,30,0);//left,top,right,bottom ivPointArray[i] = iv_point; //第一个页面需要设置为选中状态,这里采用两张不同的图片 if (i == 0){ iv_point.setBackgroundResource(R.drawable.dark_dot); }else{ iv_point.setBackgroundResource(R.drawable.white_dot); } //将数组中的ImageView加入到ViewGroup vg.addView(ivPointArray[i]); } } /** * 加载图片ViewPager */ private void initViewPager() { vp = (ViewPager) findViewById(R.id.guide_vp); //实例化图片资源 imageIdArray = new int[]{R.drawable.bbb,R.drawable.ccc,R.drawable.ddd}; viewList = new ArrayList<>(); //获取一个Layout参数,设置为全屏 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT); //循环创建View并加入到集合中 int len = imageIdArray.length; for (int i = 0;i<len;i++){ //new ImageView并设置全屏和图片资源 ImageView imageView = new ImageView(this); imageView.setLayoutParams(params); imageView.setImageBitmap(readBitMap(GuideActivity.this,imageIdArray[i])); //将ImageView加入到集合中 viewList.add(imageView); } //View集合初始化好后,设置Adapter vp.setAdapter(new GuidePagerAdapter(viewList)); //设置滑动监听 vp.setOnPageChangeListener(this); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } /** 2. * 以最省内存的方式读取本地资源的图片 3. * @param context 4. * @param resId 5. * @return 6. */ public static Bitmap readBitMap(Context context, int resId){ BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; //获取资源图片 InputStream is = context.getResources().openRawResource(resId); return BitmapFactory.decodeStream(is,null,opt); } /** * 滑动后的监听 * @param position */ @Override public void onPageSelected(int position) { //循环设置当前页的标记图 int length = imageIdArray.length; for (int i = 0;i<length;i++){ ivPointArray[position].setBackgroundResource(R.drawable.dark_dot); if (position != i){ ivPointArray[i].setBackgroundResource(R.drawable.white_dot); } } //判断是否是最后一页,若是则显示按钮 if (position == imageIdArray.length - 1){ ib_start.setVisibility(View.VISIBLE); }else { ib_start.setVisibility(View.GONE); } } @Override public void onPageScrollStateChanged(int state) { } }
导航页布局view_pager.xml(LinearLayout)是用来控制点的,ImagerButton(如果滑倒最后一页,出现按钮,点击进入主页面):
<?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.support.v4.view.ViewPager android:id="@+id/guide_vp" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/guide_ll_point" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="40dp" android:gravity="center_horizontal" android:orientation="horizontal"></LinearLayout> <ImageButton android:id="@+id/guide_ib_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/guide_ll_point" android:layout_centerHorizontal="true" android:background="@null" android:src="@mipmap/ic_launcher" android:visibility="gone" /> </RelativeLayout>
GuidePagerAdapter:
package com.sunapollo.myapplication; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import java.util.List; /** * Created by 南尘 on 2016/7/10. */ public class GuidePagerAdapter extends PagerAdapter { private List<View> viewList; public GuidePagerAdapter(List<View> viewList) { this.viewList = viewList; } /** * @return 返回页面的个数 */ @Override public int getCount() { if (viewList != null) { return viewList.size(); } return 0; } /** * 判断对象是否生成界面 * @param view * @param object * @return */ @Override public boolean isViewFromObject(View view, Object object) { return view == object; } /** * 初始化position位置的界面 * @param container * @param position * @return */ @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(viewList.get(position)); return viewList.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewList.get(position)); } }
最后就是主页面了,我在里面什么操作都没有,,就是默认的MainActivity,就不贴出来了.
Activity记得注册就行了!
手懒得童鞋点这里http://download.csdn.net/detail/qq_27757229/9871422源码直接下载