本文用viewpager实现了页面的无限滑动,点击导航点可跳转到指定的页面,以为一般做启动页面的时候,开发者往往会在最后一个页面添加一些按钮或者选项,所以,这里用的页面是一个xml文件形式,并非一个图片,
(1),创建一个总的xml文件,里面有一个ViewPager存放空间,还有几个底部图片点点,跟随图片动,(guidelayout.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/id_vp" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> <LinearLayout android:layout_alignParentBottom="true" android:layout_width="match_parent" android:gravity="center" android:layout_marginBottom="20dp" android:layout_height="50dp"> <ImageView android:id="@+id/id_iv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:src="@drawable/greenyuan"/> <ImageView android:id="@+id/id_iv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:src="@drawable/redyuan"/> <ImageView android:id="@+id/id_iv3" android:layout_marginLeft="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/redyuan"/> </LinearLayout> </RelativeLayout> </LinearLayout>
导航点用shape画即可:(redyuan.xml ,greenyuan.xml),步骤是在drawable目录下,创建一个xml文件即可,如redyuan.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#ff1111"></solid> <size android:width="5pt" android:height="5pt"></size> </shape>
(2)创建三个xml文件,每个都加载了一个图片,铺满整个屏幕作为启动页面的导航页。
(3)创建一个导航activity,如GuideActivity,
(3-1:加载view视图,
LayoutInflater inflater = LayoutInflater.from(this); List<View> views = new ArrayList<View>(); views.add(inflater.inflate(R.layout.guide1, null)); views.add(inflater.inflate(R.layout.guide2, null));views.add(inflater.inflate(R.layout.guide3, null));上面为主要代码,所以单独拿出,下面是全部代码(里面有具体解释)import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.support.v4.view.PagerAdapter; 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.view.ViewGroup; import android.view.ViewParent; import android.widget.ImageView; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity implements ViewPager.OnPageChangeListener,View.OnClickListener { public ViewPager vp; private ImageView iv1; private ImageView iv2; private ImageView iv3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.guidelayout); addControl();//加载控件 } private void addControl() { vp = (ViewPager) findViewById(R.id.id_vp); LayoutInflater inflater = LayoutInflater.from(this); List<View> views = new ArrayList<View>(); views.add(inflater.inflate(R.layout.guide1, null)); views.add(inflater.inflate(R.layout.guide2, null)); views.add(inflater.inflate(R.layout.guide3, null)); MyAdapter ma=new MyAdapter(views); iv1 = (ImageView) findViewById(R.id.id_iv1); iv2 = (ImageView) findViewById(R.id.id_iv2); iv3 = (ImageView) findViewById(R.id.id_iv3); iv1.setOnClickListener(this); iv2.setOnClickListener(this); iv3.setOnClickListener(this); vp.setAdapter(ma); vp.setOnPageChangeListener(this); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { //监听pager滑动到第几个页面,如滑动第五个(角标为4)一共三个页面,所以4%3==1,也就是第二个页面 if (position%3==0){ iv1.setImageResource(R.drawable.greenyuan); iv2.setImageResource(R.drawable.redyuan); iv3.setImageResource(R.drawable.redyuan); }else if(position%3==1){ iv2.setImageResource(R.drawable.greenyuan); iv1.setImageResource(R.drawable.redyuan); iv3.setImageResource(R.drawable.redyuan); }else if(position%3==2){ iv3.setImageResource(R.drawable.greenyuan); iv1.setImageResource(R.drawable.redyuan); iv2.setImageResource(R.drawable.redyuan); } } @Override public void onPageScrollStateChanged(int state) { } //点击监听 @Override public void onClick(View v) { switch (v.getId()){ case R.id.id_iv1: vp.setCurrentItem(0); break; case R.id.id_iv2: vp.setCurrentItem(1); break; case R.id.id_iv3: vp.setCurrentItem(2); break; } } class MyAdapter extends PagerAdapter{ List<View> list; public MyAdapter(List<View> list) { this.list=list; } @Override public Object instantiateItem(ViewGroup container, int position) { position %= list.size(); if(position<0) { position= list.size()+position; } View view=list.get(position); //把得到的view添加到一个父组件中,通过父组件来控制它。 ViewParent vp=view.getParent(); if(vp !=null) { ViewGroup vg=(ViewGroup)vp; vg.removeView(view); //移除view。这里已经移除,所以在destroyItem里就不用移除了。 } container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // container.removeView((View) object); } @Override public int getCount() { return list.size()*1000;//这里因为是无限循环,所以*1000; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } } }