Android 欢迎界面及首次安装导航界面实例

原创 2015年11月21日 10:55:27

转载请说明出处:http://blog.csdn.net/qq_17362885/article/details/49962683 


本文主要通过一个小demo讲解如何实现软件启动时显示欢迎界面及首次安装显示导航。如有不足之处请指出,让我们相互学习。

先上效果图:


一、使用到的主要技术:SharedPreference,ViewPager

二、欢迎界面

Welcome.java:

package com.example.jc.navitation;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.os.Handler;

/**
 * Created by jc on 2015/11/20.
 * 通过使用SharedPreference、Handler技术,实现显示welcome界面1.5秒
 * 与选择是否显示导航动画
 */
public class WelcomeActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        shipToNavigationOrFrame();
    }

    //判断且实现应跳转导航动画还是主界面
    private void shipToNavigationOrFrame(){
        boolean firstFlag; //是否首次安装
        SharedPreferences sharedPreferences = getSharedPreferences("flag", MODE_PRIVATE);
        firstFlag = sharedPreferences.getBoolean("first", true);

        final Intent intent = new Intent();
        if (firstFlag){
            intent.setClass(this,NavigationActivity.class);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putBoolean("first", false);
            editor.apply(); //apply与commit作用相同,虽没返回值,但效率更高
        }else {
            intent.setClass(this, FrameActivity.class);
        }
        new Handler().postDelayed(new Runnable() { //延时1.5秒
            @Override
            public void run() {
                startActivity(intent);
                WelcomeActivity.this.finish();
            }
        },1500);
    }
}

布局文件值设置了某张图片为背景,此处就不贴出。

SharedPreference为android中一种存储技术,处理的是key-value对。通常用于存储轻量的数据。

此处主要通过新建了一个“first”表示判断是否为首次安装。


二、ViewPager实现导航界面

navigationActivity.java

package com.example.jc.navitation;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;

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

/**
 * Created by jc on 2015/11/20.
 * 通过使用传统的ViewPager技术实现多个页面滑动切换
 * 且实现动态确定及添加导航圆点,使程序更具弹性
 */
public class NavigationActivity extends ActionBarActivity {

    private ViewPager vPager;
    private List<View> vList; //装载各页面的视图
    private ImageView[] pointImgViews; //装载导航小圆点
    private ViewGroup pointGroup; //与布局文件的小黑点位置ID相关联

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navigation);
        initView();
        setViewPager();
        addPoints();
        setAdapterForViewPager();
    }

    private void initView(){
        vPager = (ViewPager)findViewById(R.id.navigation_vp);
        pointGroup = (ViewGroup)findViewById(R.id.viewPoints);

        getSupportActionBar().hide();
    }

    //实现基本滑动切换界面
    private void setViewPager(){
        LayoutInflater inflater = getLayoutInflater();
        vList = new ArrayList<View>();

        vList.add(inflater.inflate(R.layout.navigation_page1,null));
        vList.add(inflater.inflate(R.layout.navigation_page2,null));
        vList.add(inflater.inflate(R.layout.navigation_page3,null));
        vList.add(inflater.inflate(R.layout.navigation_page4,null));
        vList.add(inflater.inflate(R.layout.navigation_page5,null));

        PagerAdapter myAdapter = new PagerAdapter() {
            @Override
            public int getCount() {
                return vList.size();
            }

            @Override
            public boolean isViewFromObject(View view, Object o) {
                return view==o;
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView(vList.get(position));
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                container.addView(vList.get(position));
                return vList.get(position);
            }
        };

        vPager.setAdapter(myAdapter);
    }

    private void addPoints(){
        ImageView pointImgView;
        pointImgViews = new ImageView[vList.size()]; //确定小圆点的个数

        //动态添加小圆点
        for(int i=0; i<vList.size(); i++){
            pointImgView = new ImageView(NavigationActivity.this);
            pointImgView.setLayoutParams(new ViewGroup.LayoutParams(25,25)); //设置圆点大小
            pointImgView.setPadding(5, 0, 5, 0);
            pointImgViews[i] = pointImgView;

            // 默认选中的是第一张图片,此时第一个小圆点是选中状态,其他不是
            if (i == 0)
                pointImgViews[i].setImageDrawable(getResources().getDrawable(
                        R.drawable.page_indicator_focused));
            else
                pointImgViews[i].setImageDrawable(getResources().getDrawable(
                        R.drawable.page_indicator_unfocused));
            // 将imageviews添加到小圆点视图组
            pointGroup.addView(pointImgViews[i]);
        }
    }

    //添加监听器,将相应页面的小圆点设置为选中状态
    private void setAdapterForViewPager(){
        vPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                for (int i = 0; i < pointImgViews.length; i++) {
                    // 当前view下设置小圆点为未选中状态
                    pointImgViews[i].setImageDrawable(getResources().getDrawable(
                            R.drawable.page_indicator_unfocused));
                    //设置小圆点为选中状态
                    if(position == i)
                    pointImgViews[i].setImageDrawable(getResources().getDrawable(
                            R.drawable.page_indicator_focused));
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    //点击button后调用,跳转到主界面,勿忘设置参数
    public void shipToFrame(View v){
        Intent intent = new Intent(this, FrameActivity.class);
        startActivity(intent);
        this.finish();
    }
}

activity_navigation.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">


    <android.support.v4.view.ViewPager
        android:id="@+id/navigation_vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <LinearLayout
        android:id="@+id/viewPoints"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginBottom="15dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        android:paddingBottom="150dp"/>


</FrameLayout>


navigation_page5.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:background="@mipmap/navigation_image_05">

    <LinearLayout
        android:id="@+id/introduce_text"
        android:layout_width="fill_parent"
        android:layout_height="350dp"
        android:orientation="vertical"
        android:layout_centerInParent="true"
        android:layout_marginLeft="80dp"
        android:layout_marginRight="80dp"
        android:background="#ffffff"
        android:alpha="0.8">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:paddingLeft="60dp"
            android:paddingRight="60dp"
            android:paddingTop="100dp"
            android:paddingBottom="100dp"
            android:text="@string/navigation_page5_text"
            android:textSize="30dp"
            />
    </LinearLayout>

    <Button
        android:id="@+id/navigation_btn_enter"
        android:layout_width="fill_parent"
        android:layout_height="80dp"
        android:layout_below="@id/introduce_text"
        android:layout_marginTop="50dp"
        android:layout_marginLeft="150dp"
        android:layout_marginRight="150dp"
        android:background="#ffffff"
        android:alpha="0.8"
        android:text="点击进入"
        android:textSize="30dp"
        android:onClick="shipToFrame"
        />

</RelativeLayout>

其它页面的布局类似,不多说


frame.java

package com.example.jc.navitation;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;

/**
 * Created by jc on 2015/11/21.
 */
public class FrameActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_frame);
    }
}

程序到此就已结束了。

代码备注把主要代码都说明了,有疑惑的或者有建议的可以留言给我。




android导航页(欢迎页实现十分简单)

首先要弄明白原理,大致了解一下该流程 1、创建一个类继承自SimplePagerFragment,实现对导航页面的页面循环的设置、背景颜色的设置以及页面监听事件的设置 2、创建类定义每一个的页面(...
  • u013195125
  • u013195125
  • 2016年06月25日 15:33
  • 3071

Android-“启动页” 和 "左右导航"

前言本文介绍一下APP常用的启动页和左右导航页面的使用。 需求: 先判断是否第一次启动app,如果是,则进入功能使用导航(最简单的做法就是,左右滑动切换查看,滑动到最后一页点击按钮进入首页)。 如...
  • zouzhigang96
  • zouzhigang96
  • 2016年01月25日 11:15
  • 814

Android 利用ViewPager实现导航页滑动效果

  • 2014年10月29日 19:05
  • 2.93MB
  • 下载

Android开发之利用ViewPager实现导航页和滑动标签页效果

ViewPager这个组件的意义就是实现
  • mad1989
  • mad1989
  • 2014年05月27日 17:44
  • 21313

Android滑动页面导航效果: PagerSlidingTabStrip

  • 2014年08月06日 16:25
  • 626KB
  • 下载

Android学习之简单导航页的实现

关于ViewPager的描述   1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。   2)ViewPager类需要一个PagerAda...
  • qq_28468727
  • qq_28468727
  • 2016年08月11日 22:42
  • 1615

Android 欢迎界面及首次安装导航界面实例

本文主要实现软件运行时显示欢迎界面及首次安装时导航界面。如今几乎所有的APP都用到这技术。所以还是很有必要写个Demo。...
  • qq_17362885
  • qq_17362885
  • 2015年11月21日 10:55
  • 2178

Android使用ViewPager实现带指示点的页面导航效果

老样子,先上效果图: 参考博客:Android App 第一次打开时的引导界面 先上布局文件:其中activity_main.xml文件并没有什么作用。 activity_main.xm...
  • mate_ge
  • mate_ge
  • 2017年01月12日 18:09
  • 835

Android (争取做到)最全的底部导航栏实现方法

本文(争取做到)Android 最全的底部导航栏实现方法.
  • alcoholdi
  • alcoholdi
  • 2016年06月06日 11:08
  • 31838

Android 仿微信之界面导航篇(一)

微信是现在比较流行的应用了,在各大安卓市场几乎都是名列前茅了。说实话不得不羡慕腾讯庞大的用户群体,只要腾讯敢做,就会有很多人去用。废话不多说,下面就开始说一下如何实现微信的第一次启动程序的用户导航,V...
  • wangjinyu501
  • wangjinyu501
  • 2012年11月02日 14:21
  • 32779
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 欢迎界面及首次安装导航界面实例
举报原因:
原因补充:

(最多只允许输入30个字)