欢迎页使用的是viewpager,需要适配器。

注意点:

1、判断是否是第一次进入这个app。

2、欢迎页小圆点的逻辑。

实现原理:

首先在activity_welcome放入viewpager和固定四个小圆点的图片在下方。

viewpager用于存放多张欢迎页的图。

welcome_selectoer用于当在哪一页对应的小圆点为灰色状态。即设置成不可点时状态为灰色。

viewpager的内容为静态加载进去。

如图:

直接贴代码,代码都有注释:

 WelcomeActivity.java

package com.app.note.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.Display;
import android.view.View;
import com.app.note.R;
import com.app.note.adapter.WelcomeAdapter;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Handler; public class WelcomeActivity extends Activity implements OnPageChangeListener,View.OnClickListener {
private ViewPager viewPager;
private List<View> viewList;
private View view1, view2, view3, view4;
private ImageView points[];//存放小圆圈数组
private int currentIndex=0;//当前页面,默认首页
private Button startButton;
private Boolean isFirstIn = false;
private SharedPreferences pref;
private ImageView doge; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将图片设置为全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//隐藏标题栏
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
//判断是否第一次使用app
//第一个参数是文件名,第二参数是操作模式
/* Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。*/
pref = getApplicationContext().getSharedPreferences("FirstOrNo", 0 );
isFirstIn = pref.getBoolean("isFirstIn",true);
if(isFirstIn)
{
setContentView(R.layout.activity_welcome);
initViewPager();//初始化ViewPager对象
initPoint();//初始化导航小圆点
changefirst();
}else { Intent intent = new Intent(WelcomeActivity.this, LoginActivity.class);
startActivity(intent);
finish(); }} private void changefirst(){
pref = getApplicationContext().getSharedPreferences("FirstOrNo",0);
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("isFirstIn", false);
editor.commit();
} private void initPoint() {
LinearLayout linearLayout=(LinearLayout) findViewById(R.id.ll);
points=new ImageView[4];
for(int i=0;i<points.length;i++){
points[i]=(ImageView) linearLayout.getChildAt(i);//遍历LinearLayout下的所有ImageView子节点
points[i].setEnabled(true);//设置当前状态为允许(可点,灰色)
//设置点击监听
points[i].setOnClickListener(this); //额外设置一个标识符,以便点击小圆点时跳转对应页面
points[i].setTag(i);//标识符与圆点顺序一致
} currentIndex=0;
points[currentIndex].setEnabled(false);//设置首页为当前页(小点着色,蓝色)
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(WelcomeActivity.this,LoginActivity.class);
startActivity(intent);
finish(); }
}); } private void initViewPager() {
viewPager=(ViewPager) findViewById(R.id.viewpager);//取得ViewPager实例
viewList=new ArrayList<View>();//实例化list集合
startButton=(Button)findViewById(R.id.startbutton);
//用xml静态添加view
view1=View.inflate(WelcomeActivity.this, R.layout.view1, null);
view2=View.inflate(WelcomeActivity.this, R.layout.view2, null);
view3=View.inflate(WelcomeActivity.this, R.layout.view3, null);
view4=View.inflate(WelcomeActivity.this, R.layout.view4, null); viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
viewList.add(view4); //设置适配器
WelcomeAdapter adapter=new WelcomeAdapter(viewList); //绑定适配器
viewPager.setAdapter(adapter); //设置页卡切换监听
viewPager.setOnPageChangeListener(this); } @Override
public void onPageScrollStateChanged(int arg0) { } @Override
public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override
public void onPageSelected(int position ) {//当前页卡被选择时,position为当前页数
//当滑动到最后一页时隐藏点
if(position==3){
for (int i=0;i<=position;i++)
{
points[i].setVisibility(View.GONE);
}
startButton.setEnabled(true);
startButton.setVisibility(View.VISIBLE);
}
//当从最后一页往回滑的时候把点显示出来
if(currentIndex==3){
for (int i=0;i<=currentIndex;i++)
{
points[i].setVisibility(View.VISIBLE);
}
startButton.setEnabled(false);
startButton.setVisibility(View.GONE);
}
points[position].setEnabled(false);//不可点
points[currentIndex].setEnabled(true);//恢复之前页面状态
currentIndex=position; } @Override
public void onClick(View v) {
viewPager.setCurrentItem((int) v.getTag());
} }

适配器WelcomeAdapter.java

package com.app.note.adapter;

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup; import java.util.List; /**
* Created by hxdn on 2015/12/29.
*/
public class WelcomeAdapter extends PagerAdapter {
private List<View> list; public WelcomeAdapter(List<View> list) {// 利用构造器接收list集合参数
this.list = list;
} @Override
public int getCount() {// 返回页卡数量
if (list.size() != 0) {
return list.size();
}
return 0;
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {//判断是否为view对象
return arg0==arg1;//官方demo给出的建议写法
} @Override
public Object instantiateItem(ViewGroup container, int position) {//实例化一个页卡,view对象存放在ViewGroup里
container.addView(list.get(position));
return list.get(position);
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {//销毁一个页卡
container.removeView(list.get(position));
} }

  布局代码:activity_welcome.xml

 <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" tools:context="com.app.note.activity.WelcomeActivity"> <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent" /> <LinearLayout
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:orientation="horizontal" > <ImageView
android:id="@+id/iv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="25dp"
android:src="@drawable/welcome_selector" /> <ImageView
android:id="@+id/iv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="25dp"
android:src="@drawable/welcome_selector" /> <ImageView
android:id="@+id/iv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="25dp"
android:src="@drawable/welcome_selector" /> <ImageView
android:id="@+id/iv4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="25dp"
android:src="@drawable/welcome_selector" />
</LinearLayout>
<Button
android:id="@+id/startbutton"
android:layout_width="160dp"
android:layout_height="50dp"
android:text="点击进入"
android:textSize="20dp"
android:textColor="@drawable/button_text"
style="@style/btn_login"
android:background="@drawable/bg_login_btn_qq"
android:visibility="gone"
android:clickable="false"
android:layout_above="@+id/ll"
android:layout_centerHorizontal="true" /> </RelativeLayout>

  四个页面由于都差不多只贴其中一份xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<ImageView
android:id="@+id/iv1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:clickable="true"
android:src="@drawable/welcome1"
android:scaleType="fitXY"/>
</LinearLayout>

  最重要的选择器的xml:

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

Android寒假实训云笔记总结——欢迎页的更多相关文章

  1. Android电子书项目实训【项目说明】【1】

    概述: 本实训项目是本科教学中,Android课程实训的项目,旨在训练Android App訪问server,获取server数据,解析,并呈现的流程.主要包括的功能有: 1.用户注冊 2.登录 3. ...

  2. Android实训案例(九)——答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程

    Android实训案例(九)--答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程 项目也是偷师的,决心研究一下数据库.所以写的还是很详细的,各位看官,耐着性子看完,实现结果不重要 ...

  3. 软件工程实训项目案例--Android移动应用开发

    实训过程 角色分工 1.项目经理:负责项目的组织实施,制定项目计划,并进行跟踪管理 2.开发人员:对项目经理及项目负责 3.需求分析员:负责系统的需求获取和分析,并协助设计人员进行系统设计 4.系统设 ...

  4. Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局

    Android实训案例(八)--单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局 阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就 ...

  5. Android实训案例(六)——四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听

    Android实训案例(六)--四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听 Android中四大组件的使用时重中之重,我这个阶段也不奢望能把他 ...

  6. Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录的实现以及ListView的优化

    Android实训案例(五)--四大组件之一ContentProvider的使用,通讯录的实现 Android四大组件是啥这里就不用多说了,看图吧,他们之间通过intent通讯 我们后续也会一一的为大 ...

  7. Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!

    Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程! 关于2048,我看到很多大神,比如医生,郭神,所以我也研究了一段时间,还好是研究 ...

  8. Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!

    Android实训案例(三)--实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲 ...

  9. Android实训案例(二)——Android下的CMD命令之关机重启以及重启recovery

    Android实训案例(二)--Android下的CMD命令之关机重启以及重启recovery Android刚兴起的时候,着实让一些小众软件火了一把,切水果,Tom猫,吹裙子就是其中的代表,当然还有 ...

随机推荐

  1. 【组队训练】2016 ACM/ICPC Asia Regional Dalian Online

    因为不是一队……毫无晋级的压力……反正有压力也进不去呵呵呵…… 开场zr看1006我看1010.. 1010我一直在wa... zr的1006倒是比较轻松的过了...然后我让他帮我看10.... 跟他 ...

  2. DTD - XML Building Blocks

    The main building blocks of both XML and HTML documents are elements. The Building Blocks of XML Doc ...

  3. nyoj 129 树的判定

    并查集+欧拉 树的判定 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 A tree is a well-known data structure that is e ...

  4. Oracle10g完全卸载正确步骤

    Oracle卸载要求比较严格,不能简单的卸载就完事了:当然Oracle卸载也没有那么难,只是步骤比较多.Oracle10g还是Oracle11g卸载步骤都是一样的.下边详细介绍一下. 找到Oracle ...

  5. .Net 项目常见疑难杂症

    1.A项目引用 B项目 B项目引用C.dll 同时 A也必须引用 C.dll 则 A中引用的C的版本 必须和 B中引用C的版本相同 否则就会出现下面这类问题:解决办法 :同步A B项目中引用C的版本一 ...

  6. 一、FreeMarker 模版开发指南 第一章 入门

    所有资料来自 南磊 翻译的官方文档,我弄简单了,适合自己以后拿出来翻看. 章节内容如下: 简介 模板+数据模型=输出 数据模型一览 模板一览 一.模板  +  数据模型  =  输出 输出结果: &l ...

  7. 解决 mac ssh空闲 连接断开问题

    想必大家都知道,用终端 ssh 连接服务器,如果长时间没有操作,会被断开连接. 要用的话又得重新登录,这非常不方便,也影响开发效率.那针对这种情况,有没有解决方法呢? 答案是肯定的.理论上,有两种方案 ...

  8. [转]Java 动态代理机制分析及扩展

    引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执 ...

  9. Postfix 电子邮件系统精要

    来源: http://sery.blog.51cto.com/10037/45500 Postfix 电子邮件系统精要 作者:田逸(sery@163.com)  from [url]http://ww ...

  10. Samba Linux和Windows互访

    之前一直用的sshfs manager,但是会出现造成电脑黑屏的情况.网上也没找到其它类似的软件. 后面打算用Samba 直接搜到一篇很强大的文章. 1.  下载及安装Samba 推荐用yum来安装, ...