/E-Learning-apk

Cooperative development projects named E-Learning, SSE of BJTU

Primary LanguageJava

Final Report

小组成员:唐麒 汤新宇

你可以在以下地址观看项目视频

1、UI设计

- Constraint layout
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.android_e_learning.LogoActivity">
  • Relative layout
<RelativeLayout
    android:background="#ff2e75b6"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  • Linear layout
<LinearLayout
    android:id="@+id/text_lin"
    android:layout_marginTop="45dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:orientation="vertical" >
  • Swipe refresh layout
<LinearLayout
    android:id="@+id/text_lin"
    android:layout_marginTop="45dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:orientation="vertical" >

2、功能说明

- 起始页面
01
​ 起始页面通过 animation 执行动画,向用户展示软件LOGO、名称和标语等宣传性信息。
  • 新手导航
02 03 04

​ 新手导航通过 viewpager 实现三个页面之间的滑动切换,通过 sharepreference 实现单次下载新手导航页面只出现一次的功能,即除第一次进入软件进行展示外,之后该界面不再出现。

<androidx.viewpager.widget.ViewPager
    android:id="@+id/splash_vp"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  • 注册/登录界面
05 06

​ 注册/登录界面通过 Linear layout 的反复嵌套和对其他组件的布局管理,实现以上展示的界面,并对用户输入的不合法信息进行检测,如必填数据为空、密码与确认密码不一致等。此外,仍旧通过 Shared preference 实现单次登陆且恢复上次退出界面。

  • 第三方登录
07

​ 该界面在通过腾讯开发者平台认证和项目申请后,通过腾讯提供的接口,实现第三方登录,获取的权限如下图所示:

image-20200104101859651

@Override
public void onQQLoginSuccess(JSONObject jsonObject, QQLogInManager.UserAuthInfo authInfo) {
    final SharedPreferences sharedPreferences = getSharedPreferences("is_first_in_data", MODE_PRIVATE);
    final MySharedPreferences mySharedPreferences = MySharedPreferences.getSharedPreferences(sharedPreferences);
    mySharedPreferences.setIsFirstLogInTwo();
    Intent intent = new Intent(MainActivity.this, ListCourseActivity.class);
    startActivity(intent);
    overridePendingTransition(R.anim.out_alpha, R.anim.enter_alpha);
    finish();
}

函数 onQQLoginSuccess:JSONObject 里QQ用户信息 json 格式

{
  "open_id":当前登录QQ唯一标识,
  "access_token": accessToken,
  "expires_in": accessToken的有效时间,
  "nickname":昵称,
  "gender":性别,
  "province":所在省份,
  "city":所在城市,
  "year":出生年,
  "constellation":星座,
  "figureurl":30X30的头像URL,
  "figureurl_1":50X50的头像URL,
  "figureurl_2":100X100的头像URL,
  "figureurl_qq_1":40X40的头像URL,
  "figureurl_qq_2":100X100的头像URL,
  "vip":是否为qq会员,
  "level":qq会员等级,
  "is_yellow_vip":是否为黄钻,
  "yellow_vip_level":黄钻等级,
  "is_yellow_year_vip":是否为黄钻年会员
}
  • 课程列表
08 09 10

​ 课程列表通过 Swipe refresh layout 和 RecycleView 的嵌套,包括定义两种类型的 item 布局,实现课程列表的动态加载和多元化展示,通过监听服务器数据推送和 Notification 实现信息提示和下拉刷新更新数据。

- MVVM

​ 在该界面和其他模块使用数据绑定和 MVVM 开发模式,部分代码如下所示。

<data>
    <variable
        name="homeviewmodel"
        type="com.example.android_e_learning.ui.home.HomeViewModel" />
</data>

  <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/coursename"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:padding="15dp"
                android:text="@{homeviewmodel.course.name}"
                android:textColor="#000000"
                android:textSize="30sp" />

            <TextView
                android:id="@+id/introduction"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:padding="5dp"
                android:text="@string/introduction"
                android:textColor="#000000"
                android:textSize="24sp" />

            <TextView
                android:id="@+id/description"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="10dp"
                android:text="@{homeviewmodel.course.description}"
                android:textColor="#8B000000"
                android:textSize="18sp" />
public class HomeViewModel extends BaseObservable {
    private Course course;
    private Teacher teacher;

    public HomeViewModel(Course course) {
        this.course = course;
        this.teacher = course.getArrayList().get(0);
    }

    @Bindable
    public Course getCourse() {
        return course;
    }

    @Bindable
    public void setCourse(Course course) {
        this.course = course;
        notifyChange();
    }

    @Bindable
    public Teacher getTeacher() {
        return teacher;
    }

    @Bindable
    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
        notifyChange();
    }
}
  • 课程详情
11 12

​ 课程详情通过对 ActionBar 进行操作,添加退出和分享的功能,可进行微信、QQ等分享,并通过 Linear layout 对页面进行布局管理。

  • 导航栏
14 13

​ 通过 Navigation 进行导航,除了之前的 HomeFragement,主要实现了含有 WebView 的官网介绍和分享下载二维码的界面。