Android寒假实训云笔记总结——欢迎页

欢迎页使用的是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>
时间: 2024-10-06 15:33:29

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

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

概述: 本实训项目是本科教学中,Android课程实训的项目,旨在训练Android App访问服务器,获取服务器数据,解析,并呈现的流程.主要包含的功能有: 1.用户注册 2.登录 3.查看文档 4.下载电子书 5.阅读电子书 6.用户管理 设计说明: 该实训项目需要开发Android客户端和服务器端应用. 服务器端采用Struts2,直接使用JDBC访问MySQL数据库. 客户端使用xutils框架,访问action,获取JSON字符串. 开发环境: 服务器端采用MyEclipse,版本可以

Android基础知识【项目实训】【1】

[该项目实训是Android基础知识的一个综合练习] [项目题目]:校园订餐App设计 综合案例 [设计目标] 1.必要功能 ?快餐店浏览,与订餐 ?今天订餐活动查询与订餐,特价饭菜预定 ?分类订餐查询,预定 ?常定饭菜  预定 ?健康餐推荐 ?定时预定,提前预定 ?订单查看, ?餐馆与饭菜打分,评价 ?用户注册与登录 2.扩展选择功能 ?快速拨打电话 ?饮食跟踪,热量估算 ?系统设置 [项目说明] 该项目为实际应用项目的单机 简化版本,只需要完成Android平台App的设计与开发工作. Ap

Android基础知识【项目实训】【2】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 因为项目只涉及基础知识,因此项目中所用数据并不联网,都读取单机数据库.(即将该项目中所用数据,如菜品信息.店铺信息等存入数据库)用户在第一次打开该项目时,会在用户手机上创建这些数据库,并插入测试数据. 1.先制作一个欢迎界面,欢迎的同时,准备数据库 欢迎界面Activity对应

Android基础知识【项目实训】【3】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 欢迎界面过后,应该显示app的主界面了,根据[UI设计指导]中的规划,主界面采用上下两级标签导航.这部分是app开发中比较麻烦的一块. 1.先来看一下,最终的效果吧,这样做起来比较有底: 默认显示的主界面,下部是主导航,上面是二级导航,默认打开的是"促销打折"这一版面

Android基础知识【项目实训】【4】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 主界面的功能确实比较复杂,因此上一篇知识说的周边内容.现在开始说这个界面的代码和布局文件. 1.先看一下项目的组织结构吧,要不然不好说他们的关系: (1)db包中的都是跟 数据库相关的 (2)eatall中放的都是activity或者fragment (3)entity中放的实

Android基础知识【项目实训】【5】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 主界面中包含两个二级子界面,分别是活动界面和账单界面,下面介绍它们的实现代码和布局文件. 1.下面这个是 活动界面的Activity代码,因为这个界面加载时需要 读取数据库中数据了,所有功能的实现上会涉及到 db那个包中一些类. 注意这个Activity也是继承 Activit

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

Android实训案例(六)--四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听 Android中四大组件的使用时重中之重,我这个阶段也不奢望能把他所有的原理搞懂,但是最起码的,我要把他的各种使用方法了如指掌才行 BroadcastReceiver 接收系统的广播,比如电话,短信之类的 1.IP拨号器 我们在拨打电话的时候,我们系统也会事先发送一个广播,所以我们可以用广播接收者来接收到这个广播拨打电话的时候在电话号码前面加上一些优惠的长途短号,

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

Android实训案例(八)--单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局 阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就学习了一下,写篇博客梳理一下自己的思路,加深一下印象 视频链接:http://www.imooc.com/learn/641 一.棋盘 我们一看就知道,我们必须自定义View,这里我们定义一个GameView来做游戏主类,第一步,先测量,我们这里不难知道,五子棋他的棋盘是一个正方形,所以我们需要去测

2015-1-18实训结束

大三实训  JAVA和数据库的使用,三个人一组,我这一组分到的题目是“房产管理系统” 项目要求: 项目目标:系统应能对房产信息.住户基本信息(户主.家庭成员)等进行管理.所有信息能方便的增加.修改.删除等操作.至少应该实现系统功能:系统设置,包括信息项目需要的类别.代码等数据维护:房产信息中的小区.楼宇.住房等信息的维护:住户信息管理,户主信息.家庭成员信息维护:查询模块包括各种信息的查询.统计等. 实训一共两个星期多点的时间,由于我需要帮助别的组的同学,所以我用了3-5天的时间简单了完成了我这