当前位置: 首页>后端>正文

Pin&&Pattern登录注册项目

1.项目介绍

? ? ? ? 大多数的app都需要用户先进行登录注册操作才可以继续使用app功能,此项目以Pin和Pattern两种方式实现登录注册,通过这个项目可以学习梳理移动开发的基本流程,展示我对登录注册这个特定功能的理解和实现方式。这也是我的第一个比较完整的项目,希望能在此项目中得到提升。

2.使用技术

? ? ? 此项目使用Kotlin语言,于Android平台开发,使用了FragmentManager和Gson库,FragmentManager用于管理Fragment的类,它的主要优点是可以轻松地实现app的导航和用户界面切换,但是在处理页面跳转、数据传递时可能会导致它的代码量较大。Gson库的主要优点是简单易用和高效。通过Gson库,可以将Java对象转换为JSON或从JSON转换为Java对象,TypeToken处理JSON的解析,进行文件相关操作。使用ViewBinding减少冗余代码,直接将XML布局文件与Kotlin代码进行绑定。用户输入框部分利用多控件组合复用实现,手势密码界面自定义View绘制。利用ViewModel管理数据,实现Activity和Fragment之间的数据共享。使用Geet代码托管平台,代码仓库于下方连接:https://gitee.com/Annie5281/LoginAnnie.git

3.项目详情

该项目从文件获取用户信息开始,以下为文件操作、用户操作的UML图:

Pin&&Pattern登录注册项目,第1张
UML

FileManager和UserManager都采用单例设计模式,加伴生对象,确保一个类只有一个实例,并提供一个全局访问点。进行用户的数据存取时需要用到context,但是如果直接val context:Context会出现内存泄漏的问题,所以使用弱引用以防止内存泄露。

在UML类图中已经列出所有方法(黑色方法为最终未用到的方法)

以下是demo的效果图:

Pin&&Pattern登录注册项目,第2张
Pin&&Pattern登录注册项目,第3张
Pin&&Pattern登录注册项目,第4张
Pin&&Pattern登录注册项目,第5张

? ? 根据效果图可知,当当前界面输入框未全部填写时,按钮无法点击,全部输入完毕后才可以点击,用户Pin登录密码输入错误时和注册两次密码输入不一致时会有爆红的显示,按钮有震动的效果。

? ? ? ? 当存在用户信息时,用户可以进行Pin登录,也可以点击“切换到图案解锁”进行Pattern登录;不存在用户信息时,“切换到图案解锁”的文本不显示,点击“现在注册?”进行注册操作,先进行Pin密码注册,成功后进行Pattern图案密码注册,二者注册成功后跳转到Pin登录界面,用户可以选择登录方式,登录成功后跳转到RootActivity显示登录成功。

? ? ? ? 进行Pattern登录时,图案密码错误会爆红;进行Pattern注册时,下部会弹出弹窗,选择登录的用户名后方可进行滑动,当第二次密码和第一次滑动不一致时会爆红,并提示重新设置,一致后提示密码设置成功并跳转到登录界面。

? ? ? ? 有五个Fragment,分别是PinLoginFragment、PatternLoginFragment、PinRegisterFragment、PatternRegisterFragment,均用viewBinding进行视图绑定,使用FragmentManager进行Fragment之间的切换,并添加了切换的动画效果,为了方便使用,减少代码量,给Fragment添加了扩展方法navagateTo()。

? ? ? ? 用户输入框部分利用多控件组合复用实现,使用UserInputView类关联该布局文件,解析对应属性,实现灵活配置。

? ? ? ? 滑动解锁界面自定义View实现,封装圆点信息统一管理圆点,实现手触摸到点上即可点亮,线要随着手指滑动而移动

? ? ? ? 一个界面对应一个ViewModel,管理这个界面的所有数据,ViewModel可以实现对拥有者的生命周期的监听,其生命周期没有结束的时候ViewModel不会消失,好处是对一些我们需要长时间存在的数据,可以把数据放在ViewModel里面,如果数据的变化需要外面能感知到,那么可以使用LiveData(MutableLiveData是LiveData的实现子类),postVale设置它的值,一旦设置就会调给监听者,告知其发生变化。所有的操作都是从ViewModel发出去,ViewModel就是管理数据的,想要做什么事就先在ViewModel中添加什么方法。这个项目所有的Fragment都只公用一个ViewModel,

? ? ? ? 提供记录是否显示“切换到图案密码解锁”、登录按钮是否点击、注册按钮是否点击、记录登录结果的状态、记录登录的用户信息的变量,提供改变按钮登录状态的方法、登录和注册方法、通过用户名得到用户信息的方法。

4.项目难点

(1)自定义View

? ? ? ? 重写onMeasure()方法,测量View的大小,通过MeasureSpec来测量并设置View的宽高。onSizeChanged()方法会在View的尺寸改变时被调用,需要重新计算View的位置和尺寸,以确保View在正确的地方显示,并且正确地显示内容。正确使用Canvas对象来进行绘制,Canvas对象是画板,用Paint在上面作画,Paint类用来设置画笔和画刷,以及画笔的颜色、粗细、样式等属性,需要按照正确的顺序绘制View中的图形元素。需要恰当地调用invalidate()方法,即在合适的时机重新绘制这个View

(2)数据的回调

? ? ? ? 正确地理解和使用回调函数是一大难点。数据回调的原理是将函数作为参数传递给另一个函数,并在某个时间点执行这个函数。数据的回调通常是通过接口实现的,需要定义一个接口,并将该接口的实现作为参数传递给其他函数。在其他函数完成某些操作后,调用该接口的方法,以通知数据已经发生变化。

(3)ViewModel的使用

? ? ? ? 使用ViewModel进行数据绑定可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑,使得Bug很难被调试,看到界面异常了,有可能是View的代码有Bug,也可能是ViewModel的代码有问题。数据穿插感觉比较复杂。

5.个人总结

? ? ? 在开始第一个Android项目之前,我学习了Kotlin语言的一些基础知识,了解了Android Studio的使用,熟悉了基本的UI组件和布局,这些基础知识对于顺利完成项目非常重要。 完成第一个Android项目让我深刻体会到了学习和实践的重要性,在这个过程中,我不仅掌握了Android开发的基础知识和技能,还培养了自己的解决问题的能力。但是对于一些开发常用的知识掌握的不是很熟练,对于一些知识的使用不够灵活,还需要以后继续实践,在后期的项目中得到提升。未来,我将继续努力提升自己的编程能力和综合素质,继续学习Android开发的知识进,努力为成为一名优秀的Android开发工程师打下坚实的基础。


https://www.xamrdz.com/backend/3u71937632.html

相关文章: