Android引导界面实现

Android   2014-07-10 14:47:36 发布
您的评价:
     
4.0  
收藏     3收藏

ViewPager类提供了多界面切换的新效果,是谷歌在3.0之后加入的新特性,所以在使用时需要引用android.support.v4.view.ViewPager。

本次需要实现一个软件的一个通用部分--引导界面。

主程序:

package com.xys.vf;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout; /**
* 功能描述:主程序入口类
*/
public class MainActivity extends Activity implements OnClickListener,
OnPageChangeListener {
// 定义ViewPager对象
private ViewPager viewPager; // 定义ViewPager适配器
private ViewPagerAdapter vpAdapter; // 定义一个ArrayList来存放View
private ArrayList<View> views; // 引导图片资源
private static final int[] pics = { R.drawable.guide1, R.drawable.guide2,
R.drawable.guide3, R.drawable.guide4 }; // 底部小点的图片
private ImageView[] points; // 记录当前选中位置
private int currentIndex; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 初始化组件
initView();
// 初始化数据
initData();
} /**
* 初始化组件
*/
private void initView() {
// 实例化ArrayList对象
views = new ArrayList<View>(); // 实例化ViewPager
viewPager = (ViewPager) findViewById(R.id.viewpager); // 实例化ViewPager适配器
vpAdapter = new ViewPagerAdapter(views);
} /**
* 初始化数据
*/
private void initData() {
// 定义一个布局并设置参数
LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT); // 初始化引导图片列表
for (int i = 0; i < pics.length; i++) {
ImageView iv = new ImageView(this);
iv.setLayoutParams(mParams);
iv.setImageResource(pics[i]);
views.add(iv);
} // 设置数据
//前面的views中没有数据 在前面的循环中才插入数据 而此时vpAdapter中已经有数据说明
//初始化adapter的时候 参数传递是传引用
viewPager.setAdapter(vpAdapter);
// 设置监听
viewPager.setOnPageChangeListener(this); // 初始化底部小点
initPoint();
} /**
* 初始化底部小点
*/
private void initPoint() {
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout); points = new ImageView[pics.length]; // 循环取得小点图片
for (int i = 0; i < pics.length; i++) {
// 得到一个LinearLayout下面的每一个子元素
points[i] = (ImageView) linearLayout.getChildAt(i);
// 默认都设为灰色
points[i].setEnabled(true);
// 给每个小点设置监听
points[i].setOnClickListener(this);
// 设置位置tag,方便取出与当前位置对应
points[i].setTag(i);
} // 设置当面默认的位置
currentIndex = 0;
// 设置为白色,即选中状态
points[currentIndex].setEnabled(false);
} /**
* 当滑动状态改变时调用
*/
@Override
public void onPageScrollStateChanged(int arg0) { } /**
* 当当前页面被滑动时调用
*/ @Override
public void onPageScrolled(int arg0, float arg1, int arg2) { } /**
* 当新的页面被选中时调用
*/ @Override
public void onPageSelected(int position) {
// 设置底部小点选中状态
setCurDot(position);
} /**
* 通过点击事件来切换当前的页面
*/
@Override
public void onClick(View v) {
int position = (Integer) v.getTag();
setCurView(position);
setCurDot(position);
} /**
* 设置当前页面的位置
*/
private void setCurView(int position) {
// 排除异常情况
if (position < 0 || position >= pics.length) {
return;
}
viewPager.setCurrentItem(position);
} /**
* 设置当前的小点的位置
*/
private void setCurDot(int positon) {
// 排除异常情况
if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) {
return;
}
points[positon].setEnabled(false);
points[currentIndex].setEnabled(true); currentIndex = positon;
} }

数据适配器类:

package com.xys.vf;

import java.util.ArrayList;

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View; public class ViewPagerAdapter extends PagerAdapter { //界面列表
private ArrayList<View> views; public ViewPagerAdapter(ArrayList<View> views) {
this.views=views;
} //获得当前界面总数
@Override
public int getCount() {
// TODO Auto-generated method stub
if(views!=null){
return views.size();
}
return 0;
} //初始化position位置的界面
@Override
public Object instantiateItem(View view, int position) {
// TODO Auto-generated method stub
((ViewPager)view).addView(views.get(position),0);
return views.get(position);
} //判断是否由对象生成界面
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0==arg1; } //销毁position位置的界面
@Override
public void destroyItem(View view, int position, Object arg2) {
((ViewPager) view).removeView(views.get(position));
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } }

布局类:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
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"
tools:context=".MainActivity" > <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/> <LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="24dip"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:layout_gravity="center_vertical"
android:padding="15dip"
android:src="@drawable/point"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:layout_gravity="center_vertical"
android:padding="15dip"
android:src="@drawable/point"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:layout_gravity="center_vertical"
android:padding="15dip"
android:src="@drawable/point"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:layout_gravity="center_vertical"
android:padding="15dip"
android:src="@drawable/point"/>
</LinearLayout> </RelativeLayout>

主页面下面的小圆点是通过selector来实现的:

<?xml version="1.0" encoding="UTF-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:drawable="@drawable/point_select" />
<item android:state_enabled="true" android:drawable="@drawable/point_normal" />
</selector>

来自:http://blog.csdn.net/eclipsexys/article/details/9346211

扩展阅读

Android实现用户引导界面
Android实现应用程序只有在第一次启动时显示引导界面 ,以后就不在显示了
Android用ViewPager实现欢迎引导页面
android使用ViewPager实现欢迎引导页
引导页库slidingtutorial-android介绍

为您推荐

Android用ViewPager实现欢迎引导页面
Android的 ViewPager 学习笔记
Android用ViewPager实现多页面的切换效果
android中最好的瀑布流控件PinterestLikeAdapterView
Android—万能ListView适配器

更多

Android
Android开发

相关文档  — 更多
相关经验  — 更多

(转载)Android引导界面实现的更多相关文章

  1. 十八、Android引导界面

    一.所需素材 很有必要整理一下,里面附带友盟的社会化分享组件,我就不去掉了. 二.代码 import com.umeng.update.UmengUpdateAgent; import android ...

  2. Android引导界面

    一.所需素材       很有必要整理一下,里面附带友盟的社会化分享组件,我就不去掉了. 二.代码 import com.umeng.update.UmengUpdateAgent; import a ...

  3. 【Android】首次进入应用时加载引导界面

    参考文章: [1]http://blog.csdn.net/wsscy2004/article/details/7611529 [2]http://www.androidlearner.net/and ...

  4. android——利用SharedPreference做引导界面

    很久以前就接触过sharedPreference这个android中的存储介质.但是一直没有实际使用过,今天在看之前做的“民用机型大全”的app时,突然想到可以使用sharedPreference类来 ...

  5. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

  6. Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现

    周末升级了墨迹天气,看着引导界面做的不错,模仿一下,可能与原作者的代码实现不一样,但是实现的效果还是差不多的.先分享一篇以前的文章,android动画的基础知识,<Android UI开发第十二 ...

  7. 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面

    大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要想实现应用程序只启动一次引导界面这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单, ...

  8. Android 首次进入应用时加载引导界面

    功能需求:首次进入应用时加载引导界面 思路: 1.首次进入,怎么判断?查看SharedPreferences中某个字段 2.基本上每个应用都有个进入实际功能是的动画加载页面,我们可以在该Activit ...

  9. 【Android UI设计与开发】第04期:引导界面(四)仿人人网V5.9.2最新版引导界面

    这一篇我将会以人人网的引导界面为实例来展开详细的讲解,人人网的引导界面比较的新颖,不同于其他应用程序千篇一律的靠滑动来引导用户,而是以一个一个比较生动形象的动画效果展示在用户们的面前,有一种给人眼前一 ...

随机推荐

  1. caffe mnist实例 --lenet_train_test.prototxt 网络配置详解

    1.mnist实例 ##1.数据下载 获得mnist的数据包,在caffe根目录下执行./data/mnist/get_mnist.sh脚本. get_mnist.sh脚本先下载样本库并进行解压缩,得 ...

  2. Log4Net快速配置

    1. Log4NET的概念: a) 级别:trace.debug.info.warn.error.fatal.常用debug(调试信息,程序员临时跟踪执行,在正式运行的项目中应该不显示):warn(警 ...

  3. 手游服务器端接入google的SDK

    在接入google的SDK之前,当然先要用你的google开发者账号要去申请你接入的应用,这些步骤就直接省略了具体的步骤可以查看这篇博文:http://blog.csdn.net/hjun01/art ...

  4. C/C++中的函数指针

    C/C++中的函数指针 一.引子 今天无聊刷了leetcode上的一道题,如下: Median is the middle value in an ordered integer list. If t ...

  5. ZBrush中如何实现智能对称

    ZBrush软件智能化和人性化的工作流程让用户在创作中提高工作效率,体验创作乐趣,说起智能化不得不提的就是ZBrush 4R8®给我们提供的智能对称功能,所谓的智能对称就是当您在编辑其中一半的物体模型 ...

  6. 路飞学城Python-Day24

    12.粘包现象 客户端接收的信息指定了的字节,TCP协议没有丢失协议,只是只能接收指定的字节数,于是产生出了粘包现象 服务端接收命令只能接收1024字节,服务端执行命令结果以后传输给客户端,客户端再以 ...

  7. easyUI datagrid的合并的js封装

    $.extend($.fn.datagrid.methods, { autoMergeCells : function (jq, fields) { return jq.each(function ( ...

  8. BZOJ 1878 HH的项链 (树状数组+离线)

    题目大意:给你一个序列,求某区间出现不同的数的个数. 貌似离线树状数组是最好的解法 先把所有询问挂在它们询问的右端点上 然后从头到尾遍历这个序列,记录这个位置的值上一次出现的位置 那么,当遍历到第i位 ...

  9. NOIP2013 华容道 (棋盘建图+spfa最短路)

    #include <cstdio> #include <algorithm> #include <cstring> #include <queue> # ...

  10. 线性回归(regression)

    简介 回归分析只涉及到两个变量的,称一元回归分析.一元回归的主要任务是从两个相关变量中的一个变量去估计另一个变量,被估计的变量,称因变量,可设为Y:估计出的变量,称自变量,设为X. 回归分析就是要找出 ...