从之前入门Android,一步一步的走到现在,过程真的难于言表,只有经历过的人才知道吧,理解初学Android时痛苦,所以现在在Android上略窥门径的时候,回过头来写一些小Demo,希望能够帮助到需要的人,后面有空会经常写一些实例Demo。

废话不多说,这次讲解APP的引导页启动页,我使用在代码中加入详细的注释的方式进行讲解,对于以下不经常出现的API我都进行了注解,接下来直接开始吧。

先上效果图(PS:动态图没来得及做,时间好晚了,可以直接下载我的项目运行,附GitHub链接):

java包如图:

 

WelcomeActivity.java

package com.example.power.welcomepage;import android.app.Activity;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.os.Handler;import com.example.power.welcomepage.Activity.MainActivity;import com.example.power.welcomepage.Activity.WelcomeGuideActivity;import com.example.power.welcomepage.Util.SharedPreferencesUtil;public class WelcomeActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        /*首先启动该Activity,并判断是否是第一次启动,注意,需要添加默认值,        * 如果是第一次启动,则先进入功能引导页*/        boolean isFirstOpen = SharedPreferencesUtil.getBoolean(this, SharedPreferencesUtil.FIRST_OPEN, true);        if(isFirstOpen){            Intent intent = new Intent(this, WelcomeGuideActivity.class);            startActivity(intent);            /*注意,需要使用finish将该activity进行销毁,否则,在按下手机返回键时,会返回至启动页*/            finish();            return;        }        /*如果不是第一次启动app,则启动页*/        setContentView(R.layout.activity_welcome);        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                /*2秒后进入主页*/                enterHomeActivity();            }        },2000);    }    private void enterHomeActivity(){        Intent intent = new Intent(this, MainActivity.class);        startActivity(intent);        finish();    }}

WelcomeGuideActivity.java

package com.example.power.welcomepage.Activity;import android.app.Activity;import android.content.Intent;import android.os.Build;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import com.example.power.welcomepage.Adapter.GuideViewPagerAdapter;import com.example.power.welcomepage.R;import com.example.power.welcomepage.Util.SharedPreferencesUtil;import com.example.power.welcomepage.WelcomeActivity;import java.util.ArrayList;import java.util.List;/** * Created by Power on 2018/11/2. */public class WelcomeGuideActivity extends Activity implements View.OnClickListener {    private ViewPager viewPager;    private GuideViewPagerAdapter adapter;    private List views;    private Button startBtn;    /*引导页图片资源*/    private static final int[] pics = {  R.layout.guid_view1,            R.layout.guid_view2, R.layout.guid_view3, R.layout.guid_view4 };    /*底部小点图片*/    private ImageView[] dots;    /*用于记录当前选中位置*/    private int currentIndex;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_guide);        views = new ArrayList();        /*初始化引导页视图列表,需要对资源进行处理*/        for(int i = 0; i < pics.length; i++){            View view = LayoutInflater.from(this).inflate(pics[i], null);            if(i == pics.length - 1){                startBtn = (Button)view.findViewById(R.id.btn_login);                /*这里使用setTag方法进行标注。在View中的setTag(Onbect)表示给View                添加一个格外的数据,以后可以用getTag()将这个数据取出来。可以用在                多个Button添加一个监听器,每个Button都设置不同的setTag。这个监听                器就通过getTag来分辨是哪个Button 被按下。*/                startBtn.setTag("enter");                startBtn.setOnClickListener(this);            }            views.add(view);        }        viewPager = (ViewPager)findViewById(R.id.vp_guide);        /*初始化adapter*/        adapter = new GuideViewPagerAdapter(views);        viewPager.setAdapter(adapter);        /*需要设置页面改变的监听器,这样我们能把我页面改变时的具体操作细节,所以        需要创建PageChangeListener,实现OnPageChangeListener接口*/        viewPager.addOnPageChangeListener(new PageChangeListener());        initDots();    }    @Override    protected void onResume() {        super.onResume();    }    @Override    protected void onPause() {        super.onPause();        /*如果切换到后台,就设置下次不进入功能引导页*/        SharedPreferencesUtil.setBoolean(WelcomeGuideActivity.this, SharedPreferencesUtil.FIRST_OPEN, false);        finish();    }    @Override    protected void onStop() {        super.onStop();    }    @Override    protected void onDestroy() {        super.onDestroy();    }    private void initDots(){        LinearLayout linearLayout = (LinearLayout)findViewById(R.id.ll);        dots = new ImageView[pics.length];        /*循环取得小点图片*/        for(int i = 0; i < pics.length; i++){            /*得到一个LinearLayout下面的每一个子元素*/            dots[i] = (ImageView)linearLayout.getChildAt(i);            dots[i].setEnabled(false);//设置成灰色            dots[i].setOnClickListener(this);            dots[i].setTag(i);//设置位置tag,方便取出与当前位置对应,原理同上        }        currentIndex = 0;        dots[currentIndex].setEnabled(true); // 设置为白色,即选中状态    }    /**     * 设置当前view     *     * @param position     */    private void  setCurrentView(int position){        if(position < 0 || position > pics.length){            return;        }        viewPager.setCurrentItem(position);    }    /**     * 设置当前指示点     *     * @param position     */    private void setCurDot(int position) {        if (position < 0 || position > pics.length || currentIndex == position) {            return;        }        dots[position].setEnabled(true);        dots[currentIndex].setEnabled(false);        currentIndex = position;    }    @Override    public void onClick(View v) {        if(v.getTag().equals("enter")){            enterMainActivity();            return;        }        int position = (Integer) v.getTag();        setCurrentView(position);        setCurDot(position);    }    private void enterMainActivity(){        Intent intent = new Intent(WelcomeGuideActivity.this, WelcomeActivity.class);        startActivity(intent);        SharedPreferencesUtil.setBoolean(WelcomeGuideActivity.this, SharedPreferencesUtil.FIRST_OPEN, false);        finish();    }    private class PageChangeListener implements ViewPager.OnPageChangeListener{        /*当滑动状态改变时调用*/        @Override        public void onPageScrollStateChanged(int state) {            /*arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。*/        }        /*当前页面被滑动时调用*/        @Override        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            // arg0 :当前页面,及你点击滑动的页面            // arg1:当前页面偏移的百分比            // arg2:当前页面偏移的像素位置        }        /*当新的页面被选中时调用*/        @Override        public void onPageSelected(int position) {            setCurDot(position);        }    }}
SharedPreferencesUtil.java
package com.example.power.welcomepage.Util;import android.content.Context;import android.content.SharedPreferences;/** * Created by Power on 2018/11/2. *//*我们使用SharedPreferences的数据储存方式进行存取,所以我们创建这个工具类进行封装操作,较为方便可行。* 在这里我以我们要使用到的getBoolean和setBoolean进行举例讲解,其余类型原理一致*/public class SharedPreferencesUtil {    private static final String FILE_NAME = "welcomePage";    public static final String FIRST_OPEN = "first_open";    public static Boolean getBoolean(Context context, String strKey,                                     Boolean strDefault){        /*使用Context.MODE_PRIVATE模式创建shared preference文件,意味着只用本应用程序        * 能够使用,还包括MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE 模式的,这两种        * 模式下,其他任何app均可通过文件名访问该文件。*/        SharedPreferences sharedPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE        );        /*在文件中获取一个Boolean类型值,strDefault是默认值,可以省略,其意义是查找的        key不存在时函数的返回值。*/        Boolean result = sharedPreferences.getBoolean(strKey, strDefault);        return result;    }    public static Boolean getBoolean(Context context, String strKey) {        SharedPreferences setPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE);        Boolean result = setPreferences.getBoolean(strKey, false);        return result;    }    public static void setBoolean(Context context, String strKey,                                  Boolean strData){        SharedPreferences sharedPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE        );        /*往shared preference文件中写入值时,我们需要用到SharedPreferences.Editor*/        SharedPreferences.Editor editor = sharedPreferences.edit();        editor.putBoolean(strKey, strData);        editor.commit();    }    public static String getString(Context context, String strKey) {        SharedPreferences setPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE);        String result = setPreferences.getString(strKey, "");        return result;    }    public static String getString(Context context, String strKey,                                   String strDefault) {        SharedPreferences setPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE);        String result = setPreferences.getString(strKey, strDefault);        return result;    }    public static void setString(Context context, String strKey, String strData) {        SharedPreferences activityPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE);        SharedPreferences.Editor editor = activityPreferences.edit();        editor.putString(strKey, strData);        editor.commit();    }    public static int getInt(Context context, String strKey) {        SharedPreferences setPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE);        int result = setPreferences.getInt(strKey, -1);        return result;    }    public static int getInt(Context context, String strKey, int strDefault) {        SharedPreferences setPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE);        int result = setPreferences.getInt(strKey, strDefault);        return result;    }    public static void setInt(Context context, String strKey, int strData) {        SharedPreferences activityPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE);        SharedPreferences.Editor editor = activityPreferences.edit();        editor.putInt(strKey, strData);        editor.commit();    }    public static long getLong(Context context, String strKey) {        SharedPreferences setPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE);        long result = setPreferences.getLong(strKey, -1);        return result;    }    public static long getLong(Context context, String strKey, long strDefault) {        SharedPreferences setPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE);        long result = setPreferences.getLong(strKey, strDefault);        return result;    }    public static void setLong(Context context, String strKey, long strData) {        SharedPreferences activityPreferences = context.getSharedPreferences(                FILE_NAME, Context.MODE_PRIVATE);        SharedPreferences.Editor editor = activityPreferences.edit();        editor.putLong(strKey, strData);        editor.commit();    }}
GuideViewPagerAdapter.java
package com.example.power.welcomepage.Adapter;import android.support.annotation.NonNull;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup;import java.util.List;/** * Created by Power on 2018/11/2. *//*我们需要使用适配器来帮助我们更方便的使用ViewPager*/public class GuideViewPagerAdapter extends PagerAdapter {    private List views;    public GuideViewPagerAdapter(List views){        super();        this.views = views;    }    @Override    public int getCount() {        if(views != null){            return views.size();        }        return 0;    }    @Override    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {        ((ViewPager)container).removeView(views.get(position));    }    @Override    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {        return view == ((View)object);    }    @NonNull    @Override    public Object instantiateItem(@NonNull ViewGroup container, int position) {        ((ViewPager)container).addView(views.get(position), 0);        return views.get(position);    }}

XML资源文件

guid_view1.xml

<?xml version="1.0" encoding="utf-8"?>        

guid_view2.xml

<?xml version="1.0" encoding="utf-8"?>    

guid_view3.xml

<?xml version="1.0" encoding="utf-8"?>    

guid_view4.xml

<?xml version="1.0" encoding="utf-8"?>                

activity_guide.xml

<?xml version="1.0" encoding="utf-8"?>                                                        

以上就是较为核心的代码,想要了解整个项目的小伙伴,可以下载源码查看哦,里面进行了详细的注解。

更多相关文章

  1. Android(安卓)项目中常用的页面切换TableLayout+Fragment+ViewPa
  2. android ViewPager 实现点击小圆点切换页面 案例
  3. activity的几种启动模式
  4. Android(安卓)RecyclerView 实现快速滑动
  5. Android(安卓)登陆页面 图片验证码
  6. Android基础控件(EditView、SeekBar等)的使用方法
  7. android启动Activity的两种方法
  8. 用Fildder抓取Android的HTTP包
  9. 关于Android(安卓)2.3.5 r1 锁屏问题

随机推荐

  1. Android中简单的音乐播放器
  2. Android(安卓)getSystemService
  3. Android(安卓)地图
  4. Android计算器界面布局
  5. Android应用程序启动过程源代码分析(3)
  6. Android学习笔记_20_访问应用权限汇总
  7. MultiDex 遇到的大坑
  8. Android(安卓)Glide加载四周圆角图
  9. CheckedTextView 复选框左显示
  10. android 工程,点击图片,在屏幕显示