Android实现APP欢迎页面 - 自动轮播+页面跳转+判断

今天来一个ViewPager相关的的小程序:自动轮播+页面跳转+判断是否第一次进入!

(如果是第一次进入则显示欢迎页,否则直接进入到主页)

话不多说,先来张效果图:

Android实现APP欢迎页面 - 自动轮播+页面跳转+判断_第1张图片

要实现这个小程序,先来看一下具体是如何构成的:

Android实现APP欢迎页面 - 自动轮播+页面跳转+判断_第2张图片

那么,接下来就是我们的代码实现步骤了!
首先是我们的布局文件 activity_splash.xml:

"@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    

    "@+id/ll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="50dp"
        android:orientation="horizontal"
        >
    

    /**
    * 这里我们实现一个小小的功能
    * 只在第四个页面上显示一个按钮,其他页面设置为隐藏
    * 当我们点击按钮时,进行Activity跳转
    */
    

OK,布局已经创建好了,接下来就是我们最重要的配置文件了,SplashActivity.java文件代码如下:

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

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.RadioGroup;

public class SplashActivity extends Activity {

    ViewPager vp;
    RadioGroup rg;
    Button btn;

    LinearLayout ll;
    //把小圆点存到集合中
    List listDoc;

    List list;
    int[] imgArray = { R.drawable.guide1, R.drawable.guide2, R.drawable.guide3, R.drawable.ic_launcher };

    int count = 0;
    Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            count++;
            vp.setCurrentItem(count);
            sendEmptyMessageDelayed(0, 1000);
        };
    };

    SharedPreferences preferences;
    Editor editor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        //当该acitivty启动的时候,先从SharedPreferences中获取登录状态的值,如果为true,那么直接调转到主页
        preferences = getSharedPreferences("state", MODE_PRIVATE);
        if(preferences.getBoolean("isLogin", false)){
            Intent intent = new Intent(SplashActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }

//      rg = (RadioGroup) findViewById(R.id.rg);
        btn = (Button) findViewById(R.id.btn);

        // 1、初始化控件
        vp = (ViewPager) findViewById(R.id.vp);
        // 2、初始化数据
        initData();
        // 3、创建apdater对象
        MyPagerAdapter adapter = new MyPagerAdapter();
        // 4、绑定
        vp.setAdapter(adapter);

        //添加小圆点的方法
        addDoc();

        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        });

        handler.sendEmptyMessageDelayed(0, 1000);

        vp.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                // 通过vp的选中位置,来确定小圆点的联动
                int index = arg0 % list.size();
                for (int i = 0; i < imgArray.length; i++) {
                    if(index == i){
                        listDoc.get(i).setImageResource(R.drawable.point_selected);
                    }else{
                        listDoc.get(i).setImageResource(R.drawable.point_mormal);
                    }
                }
                //当index == 3的时候 说明显示的是第四张图片
                if(index == imgArray.length - 1){
                    btn.setVisibility(View.VISIBLE);
                }else{
                    btn.setVisibility(View.GONE);
                }
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });
    }

    /**
     * 把小圆点按照导航图片的数量初始化出来
     */
    private void addDoc() {
        listDoc = new ArrayList();
        ll = (LinearLayout) findViewById(R.id.ll);

        //根据图片的数量创建小圆点对象
        for (int i = 0; i < imgArray.length; i++) {
            ImageView iv = new ImageView(SplashActivity.this);
            if(i == 0){
                iv.setImageResource(R.drawable.point_selected);
            }else{
                iv.setImageResource(R.drawable.point_mormal);
            }
            listDoc.add(iv);
            ll.addView(iv);
        }
    }


    @Override
    protected void onStop() {
        //重写stop声明周期方法
        //当点击按钮执行页面跳转时,欢迎页会被关闭,那么handler的消息不会随着acitivy的关闭而停止,所以需要手动移除消息
        if(handler != null){
            handler.removeMessages(0);
        }
        super.onStop();
    }


    private void initData() {
        list = new ArrayList();
        for (int i = 0; i < imgArray.length; i++) {
            ImageView iv = new ImageView(SplashActivity.this);
            iv.setImageResource(imgArray[i]);
            iv.setScaleType(ScaleType.FIT_XY);

            list.add(iv);
        }
    }

    class MyPagerAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            // TODO Auto-generated method stub
            return arg0 == arg1;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub
            container.removeView((View) object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            // 因为是无限轮播 所以position参数会一直增长
            // 那么我需要对list集合的长度取余数得到一个index下标
            int index = position % list.size();
            container.addView(list.get(index));
            return list.get(index);
        }

    }

}

到这里,我们的功能就都写好了,不要忘了最重要的一个步骤,就是那我们的AndroidManifest.xml文件中的首页设置成我们刚刚写好的欢迎页;

<activity
    android:name="com.example.weektwob.MainActivity"
    android:label="@string/app_name" >
activity>

好了,希望对大家有所帮助,也希望大家多多支持一下 (^_^)

你可能感兴趣的:(Android实现APP欢迎页面 - 自动轮播+页面跳转+判断)