(转载)Android引导界面实现
Android引导界面实现
| 您的评价: |
|
4.0 |
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引导界面
一.所需素材 很有必要整理一下,里面附带友盟的社会化分享组件,我就不去掉了. 二.代码 import com.umeng.update.UmengUpdateAgent; import android ...
- Android引导界面
一.所需素材 很有必要整理一下,里面附带友盟的社会化分享组件,我就不去掉了. 二.代码 import com.umeng.update.UmengUpdateAgent; import a ...
- 【Android】首次进入应用时加载引导界面
参考文章: [1]http://blog.csdn.net/wsscy2004/article/details/7611529 [2]http://www.androidlearner.net/and ...
- android——利用SharedPreference做引导界面
很久以前就接触过sharedPreference这个android中的存储介质.但是一直没有实际使用过,今天在看之前做的“民用机型大全”的app时,突然想到可以使用sharedPreference类来 ...
- 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面
[Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...
- Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现
周末升级了墨迹天气,看着引导界面做的不错,模仿一下,可能与原作者的代码实现不一样,但是实现的效果还是差不多的.先分享一篇以前的文章,android动画的基础知识,<Android UI开发第十二 ...
- 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要想实现应用程序只启动一次引导界面这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单, ...
- Android 首次进入应用时加载引导界面
功能需求:首次进入应用时加载引导界面 思路: 1.首次进入,怎么判断?查看SharedPreferences中某个字段 2.基本上每个应用都有个进入实际功能是的动画加载页面,我们可以在该Activit ...
- 【Android UI设计与开发】第04期:引导界面(四)仿人人网V5.9.2最新版引导界面
这一篇我将会以人人网的引导界面为实例来展开详细的讲解,人人网的引导界面比较的新颖,不同于其他应用程序千篇一律的靠滑动来引导用户,而是以一个一个比较生动形象的动画效果展示在用户们的面前,有一种给人眼前一 ...
随机推荐
- HttpClient连接超时及读取超时
HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间: HttpClient连接时间 所谓连接的时候 是HttpClient发送请求 ...
- ROS-SLAM仿真-cartographer
前言:cartographer是谷歌2016年发布的一个开源slam算法,采用基于图网络的优化方法,主要基于激光雷达来实现. 使用源码编译方式. 一.新建工作空间 1.1 使用roboware新建名为 ...
- C++代码审查---参考林锐高质量C/C++
功能模块名称 审查人 审查日期 代码名称 代码作者 文件结构 重要性 审查项 结论 头文件和定义文件的名称是否合理? 头文件和定义文件的目录结构是否合理? ...
- 解决有关null闪退及json解析数据中null的问题
程序在获取某些数据之后莫名崩溃.其实很早就发现了原因: 由于服务器的数据库中有些字段为空, 然后以Json形式返回给客户端时就会出现这样的数据: "somevalue":null ...
- uni-app 自定义扫码界面
二维码扫描,已经成为当下一款应用不可或缺,同时也是用户习以为常的功能了.uni-app 为我们提供了扫码 API ,直接调用即可. 需求场景 在实际开发中,平台提供的默认扫码界面,并不能满足一些自定义 ...
- java中常用的转义字符
Day02_SHJavaTraing_4-3-2017 Java中允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量. 一.JAVA中常用的转义字符
- hdu 5375 Gray code 【 dp 】
dp[i][j]表示第i位取j的时候取得的最大的分数 然后分s[i]是不是问号,s[i-1]是不是问号这大的四种情况讨论 #include<cstdio> #include<cstr ...
- RxSwift 之变换操作
https://www.aliyun.com/jiaocheng/349821.html RxSwift入坑解读-你所需要知道的各种概念 http://www.open-open.com/lib/vi ...
- 脚本_求和100以内的正整数.sh
#!bin/bash#功能:求和100以内的正整数#作者:liusingbon#seq 100 可以快速自动生成 100 个整数sum=0for i in $(seq 100)do sum=$[ ...
- 12、Camel: Content-Aware and Meta-path Augmented Metric Learning for Author Identification----作者识别
摘自:https://blog.csdn.net/me_yundou/article/details/80459341 具体看上面链接 一.摘要: 这篇文章主要介绍的是作者识别(author iden ...