天天看点

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

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

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

先上效果图:

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

一、使用到的主要技术: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);
    }
}
           

程序到此就已结束了。

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