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

注意点:

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

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

实现原理:

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

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

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

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

如图:

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

 WelcomeActivity.java

  1. package com.app.note.activity;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.SharedPreferences;
  6. import android.os.Bundle;
  7. import android.support.v4.view.ViewPager;
  8. import android.util.Log;
  9. import android.view.Display;
  10. import android.view.View;
  11. import com.app.note.R;
  12. import com.app.note.adapter.WelcomeAdapter;
  13. import android.support.v4.view.ViewPager.OnPageChangeListener;
  14. import android.view.Window;
  15. import android.view.WindowManager;
  16. import android.view.animation.Animation;
  17. import android.view.animation.ScaleAnimation;
  18. import android.widget.Button;
  19. import android.widget.ImageView;
  20. import android.widget.LinearLayout;
  21. import java.util.ArrayList;
  22. import java.util.List;
  23. import java.util.logging.Handler;
  24.  
  25. public class WelcomeActivity extends Activity implements OnPageChangeListener,View.OnClickListener {
  26. private ViewPager viewPager;
  27. private List<View> viewList;
  28. private View view1, view2, view3, view4;
  29. private ImageView points[];//存放小圆圈数组
  30. private int currentIndex=0;//当前页面,默认首页
  31. private Button startButton;
  32. private Boolean isFirstIn = false;
  33. private SharedPreferences pref;
  34. private ImageView doge;
  35.  
  36. @Override
  37. protected void onCreate(Bundle savedInstanceState) {
  38. super.onCreate(savedInstanceState);
  39. //将图片设置为全屏
  40. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
  41. //隐藏标题栏
  42. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  43. //判断是否第一次使用app
  44. //第一个参数是文件名,第二参数是操作模式
  45. /* Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
  46. Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
  47. Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
  48. MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
  49. MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。*/
  50. pref = getApplicationContext().getSharedPreferences("FirstOrNo", 0 );
  51. isFirstIn = pref.getBoolean("isFirstIn",true);
  52. if(isFirstIn)
  53. {
  54. setContentView(R.layout.activity_welcome);
  55. initViewPager();//初始化ViewPager对象
  56. initPoint();//初始化导航小圆点
  57. changefirst();
  58. }else {
  59.  
  60. Intent intent = new Intent(WelcomeActivity.this, LoginActivity.class);
  61. startActivity(intent);
  62. finish(); }}
  63.  
  64. private void changefirst(){
  65. pref = getApplicationContext().getSharedPreferences("FirstOrNo",0);
  66. SharedPreferences.Editor editor = pref.edit();
  67. editor.putBoolean("isFirstIn", false);
  68. editor.commit();
  69. }
  70.  
  71. private void initPoint() {
  72. LinearLayout linearLayout=(LinearLayout) findViewById(R.id.ll);
  73. points=new ImageView[4];
  74. for(int i=0;i<points.length;i++){
  75. points[i]=(ImageView) linearLayout.getChildAt(i);//遍历LinearLayout下的所有ImageView子节点
  76. points[i].setEnabled(true);//设置当前状态为允许(可点,灰色)
  77. //设置点击监听
  78. points[i].setOnClickListener(this);
  79.  
  80. //额外设置一个标识符,以便点击小圆点时跳转对应页面
  81. points[i].setTag(i);//标识符与圆点顺序一致
  82. }
  83.  
  84. currentIndex=0;
  85. points[currentIndex].setEnabled(false);//设置首页为当前页(小点着色,蓝色)
  86. startButton.setOnClickListener(new View.OnClickListener() {
  87. @Override
  88. public void onClick(View v) {
  89. Intent intent = new Intent(WelcomeActivity.this,LoginActivity.class);
  90. startActivity(intent);
  91. finish();
  92.  
  93. }
  94. });
  95.  
  96. }
  97.  
  98. private void initViewPager() {
  99. viewPager=(ViewPager) findViewById(R.id.viewpager);//取得ViewPager实例
  100. viewList=new ArrayList<View>();//实例化list集合
  101. startButton=(Button)findViewById(R.id.startbutton);
  102. //用xml静态添加view
  103. view1=View.inflate(WelcomeActivity.this, R.layout.view1, null);
  104. view2=View.inflate(WelcomeActivity.this, R.layout.view2, null);
  105. view3=View.inflate(WelcomeActivity.this, R.layout.view3, null);
  106. view4=View.inflate(WelcomeActivity.this, R.layout.view4, null);
  107.  
  108. viewList.add(view1);
  109. viewList.add(view2);
  110. viewList.add(view3);
  111. viewList.add(view4);
  112.  
  113. //设置适配器
  114. WelcomeAdapter adapter=new WelcomeAdapter(viewList);
  115.  
  116. //绑定适配器
  117. viewPager.setAdapter(adapter);
  118.  
  119. //设置页卡切换监听
  120. viewPager.setOnPageChangeListener(this);
  121.  
  122. }
  123.  
  124. @Override
  125. public void onPageScrollStateChanged(int arg0) {
  126.  
  127. }
  128.  
  129. @Override
  130. public void onPageScrolled(int arg0, float arg1, int arg2) {
  131.  
  132. }
  133.  
  134. @Override
  135. public void onPageSelected(int position ) {//当前页卡被选择时,position为当前页数
  136. //当滑动到最后一页时隐藏点
  137. if(position==3){
  138. for (int i=0;i<=position;i++)
  139. {
  140. points[i].setVisibility(View.GONE);
  141. }
  142. startButton.setEnabled(true);
  143. startButton.setVisibility(View.VISIBLE);
  144. }
  145. //当从最后一页往回滑的时候把点显示出来
  146. if(currentIndex==3){
  147. for (int i=0;i<=currentIndex;i++)
  148. {
  149. points[i].setVisibility(View.VISIBLE);
  150. }
  151. startButton.setEnabled(false);
  152. startButton.setVisibility(View.GONE);
  153. }
  154. points[position].setEnabled(false);//不可点
  155. points[currentIndex].setEnabled(true);//恢复之前页面状态
  156. currentIndex=position;
  157.  
  158. }
  159.  
  160. @Override
  161. public void onClick(View v) {
  162. viewPager.setCurrentItem((int) v.getTag());
  163. }
  164.  
  165. }

适配器WelcomeAdapter.java

  1. package com.app.note.adapter;
  2.  
  3. import android.support.v4.view.PagerAdapter;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6.  
  7. import java.util.List;
  8.  
  9. /**
  10. * Created by hxdn on 2015/12/29.
  11. */
  12. public class WelcomeAdapter extends PagerAdapter {
  13. private List<View> list;
  14.  
  15. public WelcomeAdapter(List<View> list) {// 利用构造器接收list集合参数
  16. this.list = list;
  17. }
  18.  
  19. @Override
  20. public int getCount() {// 返回页卡数量
  21. if (list.size() != 0) {
  22. return list.size();
  23. }
  24. return 0;
  25. }
  26.  
  27. @Override
  28. public boolean isViewFromObject(View arg0, Object arg1) {//判断是否为view对象
  29. return arg0==arg1;//官方demo给出的建议写法
  30. }
  31.  
  32. @Override
  33. public Object instantiateItem(ViewGroup container, int position) {//实例化一个页卡,view对象存放在ViewGroup里
  34. container.addView(list.get(position));
  35. return list.get(position);
  36. }
  37.  
  38. @Override
  39. public void destroyItem(ViewGroup container, int position, Object object) {//销毁一个页卡
  40. container.removeView(list.get(position));
  41. }
  42.  
  43. }

  布局代码:activity_welcome.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5.  
  6. tools:context="com.app.note.activity.WelcomeActivity">
  7.  
  8. <android.support.v4.view.ViewPager
  9. android:id="@+id/viewpager"
  10. android:layout_width="fill_parent"
  11. android:layout_height="fill_parent" />
  12.  
  13. <LinearLayout
  14. android:id="@+id/ll"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:layout_alignParentBottom="true"
  18. android:layout_centerHorizontal="true"
  19. android:layout_marginBottom="20dp"
  20. android:orientation="horizontal" >
  21.  
  22. <ImageView
  23. android:id="@+id/iv1"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:layout_gravity="center_vertical"
  27. android:clickable="true"
  28. android:padding="25dp"
  29. android:src="@drawable/welcome_selector" />
  30.  
  31. <ImageView
  32. android:id="@+id/iv2"
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:layout_gravity="center_vertical"
  36. android:clickable="true"
  37. android:padding="25dp"
  38. android:src="@drawable/welcome_selector" />
  39.  
  40. <ImageView
  41. android:id="@+id/iv3"
  42. android:layout_width="wrap_content"
  43. android:layout_height="wrap_content"
  44. android:layout_gravity="center_vertical"
  45. android:clickable="true"
  46. android:padding="25dp"
  47. android:src="@drawable/welcome_selector" />
  48.  
  49. <ImageView
  50. android:id="@+id/iv4"
  51. android:layout_width="wrap_content"
  52. android:layout_height="wrap_content"
  53. android:layout_gravity="center_vertical"
  54. android:clickable="true"
  55. android:padding="25dp"
  56. android:src="@drawable/welcome_selector" />
  57. </LinearLayout>
  58. <Button
  59. android:id="@+id/startbutton"
  60. android:layout_width="160dp"
  61. android:layout_height="50dp"
  62. android:text="点击进入"
  63. android:textSize="20dp"
  64. android:textColor="@drawable/button_text"
  65. style="@style/btn_login"
  66. android:background="@drawable/bg_login_btn_qq"
  67. android:visibility="gone"
  68. android:clickable="false"
  69. android:layout_above="@+id/ll"
  70. android:layout_centerHorizontal="true" />
  71.  
  72. </RelativeLayout>

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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent" android:layout_height="match_parent">
  4. <ImageView
  5. android:id="@+id/iv1"
  6. android:layout_width="match_parent"
  7. android:layout_height="match_parent"
  8. android:layout_gravity="center_vertical"
  9. android:clickable="true"
  10. android:src="@drawable/welcome1"
  11. android:scaleType="fitXY"/>
  12. </LinearLayout>

  最重要的选择器的xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item
  4. android:state_enabled="true" android:drawable="@drawable/v_point_pre"
  5. ></item>
  6.  
  7. <item
  8. android:state_enabled="false" android:drawable="@drawable/v_point_gray"
  9. ></item>
  10.  
  11. </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. PHOTOSHOP 中画笔工具和铅笔工具的一个小小差别

    今天在作图的时候偶然发现的一个以前并没有在意画笔和铅笔的小小区别,情况是这样的,我在做图像处理,需要一个单像素的闭合曲线灰度图来做实验,然后用画笔工具把直径调到1之后去作图,放大之后发现,跟预想的结果 ...

  2. 幻灯片(jquery实现)

    html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  3. oscgit

    Gitlab PaaS项目演示 git config --global user.name "你的名字或昵称" git config --global user.email &qu ...

  4. MSSQLSERVER数据库- SP_EXECUTESQL的使用

    EXEC和SP_EXECUTESQL有什么区别呢? 1,它们之间最大的区别是嵌入式的参数,如下面一个语句 declare @sql nvarchar() declare @id varchar() ' ...

  5. C#操作符的重载

    操作符也是可以重载的,先总结一下操作符的性质: 如我们所知,操作符在不同的情况下有不同的语义,具体取决于它所操作的类型.例如,操作符“+”在操作数值类型的时候意味着“加”,在操作字符串时意味着“连接” ...

  6. VB操作Excel

    在工程中添加引用:Microsoft Office 9.0 Object Library                    Microsoft Excel 9.0 Object Library   ...

  7. SQL Server 2005 盛宴系列 经典教程

    SQL Server 2005 盛宴系列 经典教程  [复制链接]   发表于 2007-3-27 14:08 | 来自 51CTO网页 [只看他] 楼主     TECHNET  SQL serve ...

  8. 数学之路(3)-机器学习(3)-机器学习算法-SVM[5]

    svm小结 1.超平面 两种颜色的点分别代表两个类别,红颜色的线表示一个可行的超平面.在进行分类的时候,我们将数据点  x 代入  f(x)  中,如果得到的结果小于 0 ,则赋予其类别 -1 ,如果 ...

  9. ZOJ 3827 Information Entropy 水题

    Information Entropy Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/sh ...

  10. Andorid4.x 流氓式屏蔽HOME键

    转载请列明出处 http://blog.csdn.net/steelychen/article/details/37757341 应用项目须要要屏蔽HOME键. 项目本身的要求是让按下HOME键后程序 ...