Android中ViewPagr的使用:当APP第一次使用的时候,可以使用ViewPager来创建引导界面

首先我们来看一下整个项目的结构是什么样子的:

效果图如下:
welcome界面:

引导界面有三张图片,用手指滑动可以切换图片:


主界面:

这个程序的主要的功能是用来做一个引导的界面。并且可以判断用户是不是首次使用这个应用程序,如果是首次使用的话,那么就会出现引导界面。否则就不会出现引导界面。
首先我们来看一下布局文件:
content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="learnvp.lg.com.viewpagerdemo.MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

guide.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
<!--特别要注意的一点是如果你要使用PagerTabStrip的话,那么它必定是内嵌到viewPager中去的
也就是说,pagerTabStripviewPager的子控件-->
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#00000000" >
        <android.support.v4.view.PagerTabStrip
            android:id="@+id/pagertab"
            android:layout_gravity="top"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </android.support.v4.view.ViewPager>

    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >
<!--用于定义导航点-->
        <ImageView
            android:id="@+id/iv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/login_point_selected" />

        <ImageView
            android:id="@+id/iv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/login_point" />

        <ImageView
            android:id="@+id/iv3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/login_point" />
    </LinearLayout>

</RelativeLayout>

one.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">
<ImageView
    android:src="@drawable/guide_1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>

two.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">
    <ImageView
        android:src="@drawable/guide_2"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

three.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:src="@drawable/guide_3"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <LinearLayout
        android:gravity="center_horizontal"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:text="进入"
            android:id="@+id/startButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</RelativeLayout>

自定义的MyViewPager的内容:
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;

import java.util.List;

/*这是自定义的一个PagerAdapter的适配器*/

public class MyViewPagerAdapter  extends PagerAdapter {
    /*要加载的views*/
    private List<View> mListViews;
//    private List<String> mlistTitles;
    /*可以访问全局信息*/
    private Context context;

    public MyViewPagerAdapter(List<View> mListViews,Context context){
        this.mListViews=mListViews;
        this.context=context;
//        this.mlistTitles=mlistTitles;
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(mListViews.get(position));
        return mListViews.get(position);
    }

    /*如果这个view不再使用的话,那么就销毁这个view*/
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(mListViews.get(position));
    }

    @Override
    public int getCount() {
        return mListViews.size();
    }

    /*api是这样提示的*/
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }

   /* @Override
    public CharSequence getPageTitle(int position) {
        return mlistTitles.get(position);
    }*/
}

MainActivity中的内容:
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}


guide中的内容:
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.util.ArrayList;
import java.util.List;

public class guide extends AppCompatActivity implements View.OnFocusChangeListener, ViewPager.OnPageChangeListener {
    private Button startButton;
    private ViewPager viewPager;
    private PagerTabStrip pagerTabStrip;
    private View view1,view2,view3;
    private List<View> listViews;
//    private List<String> listTitles;
    private MyViewPagerAdapter adapter;

    private ImageView[] imags;
    private int[] pots ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide);
        initViews();
        initImags();
        setListener();

    }

    /*初始化导航点*/
    public void initImags() {
        for (int i = 0; i < listViews.size(); i++) {
            imags[i] = (ImageView) findViewById(pots[i]);
        }

    }

    public void initViews() {


        viewPager = (ViewPager) findViewById(R.id.viewpager);
        listViews = new ArrayList<>();

        pagerTabStrip=(PagerTabStrip) findViewById(R.id.pagertab);
        pagerTabStrip.setTabIndicatorColor(ContextCompat.getColor(this, R.color.colorAccent));
        pagerTabStrip.setDrawFullUnderline(false);
        pagerTabStrip.setBackgroundColor(ContextCompat.getColor(this,R.color.colorAccent));
        pagerTabStrip.setTextSpacing(50);

        LayoutInflater inflater = LayoutInflater.from(this);
        view1 = inflater.inflate(R.layout.one, null);
        view2 = inflater.inflate(R.layout.two, null);
        view3 = inflater.inflate(R.layout.three, null);

        listViews.add(view1);
        listViews.add(view2);
        listViews.add(view3);

        imags = new ImageView[listViews.size()];
        pots= new int[]{R.id.iv1, R.id.iv2, R.id.iv3};

        adapter = new MyViewPagerAdapter(listViews, this);
        viewPager.setAdapter(adapter);
/*由引导界面进入到主界面中*/
        startButton= (Button) listViews.get(2).findViewById(R.id.startButton);
        startButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(guide.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        });

    }

    /*为了使用导航点,需要注册监听器*/
    public void setListener() {
        viewPager.setOnPageChangeListener(this);
    }

    @Override
    public void onFocusChange(View v, boolean hasFocus) {

    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    /*这样的话,就可以出现明暗交替变化的情况。*/
    @Override
    public void onPageSelected(int position) {
        for (int i = 0; i < pots.length; i++) {
            if (i== position) {
                imags[i].setImageResource(R.drawable.login_point_selected);
            }else {
                imags[i].setImageResource(R.drawable.login_point);
            }
        }

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}

Welcome中的内容:
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;

/**
 * 
 */
/*这是一个欢迎界面的Activity.*/
public class Welcome extends AppCompatActivity {
    /*等待的时间,也就是欢迎界面跳转到引导界面或者是主界面所需要的时间。在这段时间内,可以完成一些数据的加载*/
    public static final int TIME=2000;

    /*定义俩个常量,用以判断是去主界面还是去引导界面*/
    public static final int GO_HOME=1000;
    public static final int GO_GUIDE=1001;

    /*判断程序是不是第一次打开。如果是第一次打开的话,那么就由欢迎界面跳转到引导界面
    * 否则就有欢迎界面跳转到主界面*/
    private boolean isFirstIn=false;

    /*用来接收和发送消息,用于判断*/
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case GO_HOME:
                    goHome();
                    break;
                case GO_GUIDE:
                    goGuide();
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.we);
        isFirstIn();

    }

  /*判断是不是第一次进入程序,用SharedPreferences来进行储存数据*/
    private void isFirstIn() {
        SharedPreferences preferences = getSharedPreferences("liguo", MODE_PRIVATE);
        boolean isFirst= preferences.getBoolean("isFirstIn", true);
        SharedPreferences.Editor editor=preferences.edit();
        editor.putBoolean("isFirstIn", isFirstIn);
        editor.commit();
        if (!isFirst) {
            handler.sendEmptyMessageDelayed(GO_HOME, TIME);
        }else {
            handler.sendEmptyMessageDelayed(GO_GUIDE, TIME);
            isFirstIn=false;
        }
    }

    /*到主界面*/
    private void goHome() {
        Intent intent = new Intent(Welcome.this, MainActivity.class);
        startActivity(intent);
        finish();
    }


    /*到引导界面*/
    private void goGuide() {
        Intent intent = new Intent(Welcome.this, guide.class);
        startActivity(intent);
        finish();

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱coding的同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值