viewpager实现启动页面的无限滑动、可点击导航点(导航点定位)(简单易懂)

本文用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;
        }
    }

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值