写了一个引导页,首先看看效果吧。
这个实现的方法是上面是3个Fragment切换,中间是显示的点指示器,最下面是进入到下一个Activity的按钮。
3个Fragment的创建就不在详细说了,基本没啥东西。
Fragment的Adapter如下:
public class GuideFragmetAdapter extendsFragmentPagerAdapter { public List<Fragment>mFragmentList; public GuideFragmetAdapter(FragmentManager fm, List<Fragment>fragmentList) { super(fm); mFragmentList=fragmentList; } @Override public Fragment getItem(intposition) { return mFragmentList==null?null:mFragmentList.get(position); } @Override public intgetCount() { return mFragmentList==null?0:mFragmentList.size(); } }
下面是GuideActivity的布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_guide1"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"> <RelativeLayout android:id="@+id/activity_guide"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"> <android.support.v4.view.ViewPager android:id="@+id/vp_guide"android:layout_width="match_parent"android:layout_height="match_parent"> <requestFocus /> </android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/ll_indicator"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:gravity="center"android:layout_marginBottom="45dip" > </LinearLayout> </RelativeLayout> <Button android:id="@+id/btn_ready_use"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_marginRight="50dp"android:layout_marginLeft="50dp"android:layout_marginBottom="20dp"android:layout_marginTop="10dp"android:background="@drawable/guide_ready_use"android:textColor="@color/color_white"android:textSize="@dimen/sp_eighteen"android:text="马上使用"/> </LinearLayout>
dotselector.xml的代码
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/ic_guide_selected" android:state_selected="true"/> <item android:drawable="@drawable/ic_guide_unselected" android:state_selected="false"/> </selector>
ic_guide_selected.xml的代码
<vector android: android:viewportHeight="1024.0"android:viewportWidth="1024.0" android: xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#1296db" android:pathData="M480,480m-416,0a6.5,6.5 0,1 0,832 0,6.5 6.5,0 1,0 -832,0Z"/>
</vector>
ic_guide_unselected.xml的代码
<vector android: android:viewportHeight="1024.0"android:viewportWidth="1024.0" android: xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M510.8,960c-60.5,0 -119.2,-11.9 -174.5,-35.2 -53.4,-22.6 -101.3,-54.9 -142.5,-96 -41.2,-41.2 -73.5,-89.1 -96,-142.5 -23.4,-55.3 -35.2,-114 -35.2,-174.5 0,-60.5 11.9,-119.2 35.2,-174.5 22.6,-53.4 54.9,-101.3 96,-142.5 41.2,-41.2 89.1,-73.5 142.5,-96 55.3,-23.4 114,-35.2 174.5,-35.2 60.5,0 119.2,11.9 174.5,35.2 53.4,22.6 101.3,54.9 142.5,96 41.2,41.2 73.5,89.1 96,142.5 23.4,55.3 35.2,114 35.2,174.5 0,60.5 -11.9,119.2 -35.2,174.5 -22.6,53.4 -54.9,101.3 -96,142.5 -41.2,41.2 -89.1,73.5 -142.5,96C630,948.1 571.3,960 510.8,960zM510.8,94.3c-56.4,0 -111,11 -162.5,32.8 -49.7,21 -94.4,51.1 -132.7,89.5 -38.3,38.3 -68.5,83 -89.5,132.7 -21.8,51.5 -32.8,106.1 -32.8,162.5 0,56.4 11,111 32.8,162.5 21,49.7 51.1,94.4 89.5,132.7 38.3,38.3 83,68.5 132.7,89.5 51.5,21.8 106.1,32.8 162.5,32.8s111,-11 162.5,-32.8c49.7,-21 94.4,-51.1 132.7,-89.5 38.3,-38.3 68.5,-83 89.5,-132.7 21.8,-51.5 32.8,-106.1 32.8,-162.5 0,-56.4 -11,-111 -32.8,-162.5 -21,-49.7 -51.1,-94.4 -89.5,-132.7 -38.3,-38.3 -83,-68.5 -132.7,-89.5C621.8,105.3 567.1,94.3 510.8,94.3z"/>
</vector>
GuideActivity里面的代码:
public class GuideActivity extends AppCompatActivity implementsView.OnClickListener{ privateViewPager mVpGuide; private List<Fragment>fragmentList; privateLinearLayout mLlIndicator; private ImageView[] dotViews;//小圆点 @Override protected voidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_guide); initView(); fragmentList=new ArrayList<Fragment>(); fragmentList.add(newGuideOneFragment()); fragmentList.add(newGuideTwoFragment()); fragmentList.add(newGuideThreeFragment()); mVpGuide.setAdapter(newGuideFragmetAdapter(getSupportFragmentManager(),fragmentList)); mVpGuide.setCurrentItem(0); mVpGuide.setOnPageChangeListener(newMyPagerChangeListener()); setIndicator(); } private voidinitView() { mVpGuide=findViewById(R.id.vp_guide); findViewById(R.id.btn_ready_use).setOnClickListener(this); mLlIndicator=findViewById(R.id.ll_indicator); } private voidsetIndicator(){ LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(20, 20); mParams.setMargins(10, 0, 10,0);//设置小圆点左右之间的间隔 dotViews = newImageView[fragmentList.size()]; //判断小圆点的数量,从0开始,0表示第一个 for(int i = 0; i < fragmentList.size(); i++) { ImageView imageView = new ImageView(this); imageView.setLayoutParams(mParams); imageView.setImageResource(R.drawable.dot_selector); if(i== 0) { imageView.setSelected(true);//默认启动时,选中第一个小圆点 } else{ imageView.setSelected(false); } dotViews[i] = imageView;//得到每个小圆点的引用,用于滑动页面时,(onPageSelected方法中)更改它们的状态。 mLlIndicator.addView(imageView);//添加到布局里面显示 } } @Override public voidonClick(View v) { switch(v.getId()){ caseR.id.btn_ready_use: Intent intent = new Intent(GuideActivity.this, LoginActivity.class); startActivity(intent); finish(); break; } } /*** 设置一个ViewPager的侦听事件,当左右滑动ViewPager时菜单栏被选中状态跟着改变 */ public class MyPagerChangeListener implementsViewPager.OnPageChangeListener { @Override public void onPageScrollStateChanged(intarg0) { } @Override public void onPageScrolled(int arg0, float arg1, intarg2) { } @Override public void onPageSelected(intarg0) { switch(arg0) { case 0: dotViews[0].setSelected(true); dotViews[1].setSelected(false); dotViews[2].setSelected(false); break; case 1: dotViews[0].setSelected(false); dotViews[1].setSelected(true); dotViews[2].setSelected(false); break; case 2: dotViews[0].setSelected(false); dotViews[1].setSelected(false); dotViews[2].setSelected(true); break; } } } }