我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android Studio实现一个小说阅读App

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android Studio实现一个小说阅读App

一、基本信息

本次用java语言实现的Android小说阅读App功能非常丰富,可以在线阅读网络书籍,也可以加入书架,还可以在线搜索网络小说,有大家都在搜的关键词推荐、关键词刷新功能、搜索历史等。根据男生和女生用户的使用情况,分别显示对应的小说排行榜,包括:最热榜、热搜榜、潜力榜、留存榜和完结榜,点进排行榜,还分为周榜、月榜和总榜。在分类中,有玄幻、武侠、历史、科幻等多种类别,点进某一类别,还有热门、新书、好评和完结顶部导航栏。在阅读小说时,可以切换日夜模式,横竖屏切换,可以设置字体大小,还可以查看目录。

二、功能介绍

1. 主界面

  • 点击下方图标或左右滑动来切换书架、排行榜、分类,点击右上角搜索图标进入搜索界面
  • 从书架点击某本书籍进入阅读界面
  • 在排行榜处点击左上角♂/♀图标切换男生/女生,点击某个排行榜进入排行榜界面
  • 在分类处点击上方按钮切换男生/女生,点击某个分类进入分类界面

2. 排行榜界面

  • 点击上方按钮切换周榜/月榜/总榜
  • 点击某本书籍进入书籍详情界面

3. 分类界面

  • 点击上方按钮切换热门/新书/好评/完结
  • 点击某本书籍进入书籍详情界面

4. 搜索界面

  • 在上方搜索框中输入书名,点击搜索按钮进行搜索
  • 点击搜索结果中的书名跳转到书籍详情界面
  • 点击“大家都在搜”/“搜索历史”中的书名直接跳转到书籍详情界面

5. 书籍详情界面

  • 点击左下角“加入书架”按钮可将当前书籍加入书架
  • 点击右下角“免费阅读”按钮跳转到阅读界面
  • 点击“同类推荐”中的书籍可跳转到该书籍的详情界面
  • 点击“更多”按钮跳转到相关书籍界面

6. 阅读界面

  • 上下滑动进行阅读,左右滑动切换章节
  • 点击屏幕中部,屏幕底部出现菜单:夜间/日间、横屏/竖屏、设置、目录
  • 点击“夜间/日间”切换到夜间/日间模式
  • 点击“横屏/竖屏”切换到横屏/竖屏模式
  • 点击“设置”出现字体大小调整界面,点击“A-”减小字体大小,点击“A+”增大字体大小,点击屏幕其他部分返回
  • 点击“目录”出现书籍目录,点击某个章节可跳转到该章节,点击屏幕其他部分返回

7. 相关书籍界面

  • 点击相关书籍列表中的书籍,跳转到该书籍的详情界面

三、类图/时序图/架构图

项目结构图如下,代码一共分为6个部分,根据包名来分别介绍主要功能。

在这里插入图片描述

  1. Activity:该app中用到的所有activity。

在这里插入图片描述

DataBase:创建、操作数据库和表的函数。

在这里插入图片描述

  1. Fragment:在活动内显示的碎片,小型activity。

在这里插入图片描述

  1. Object:包含各种api返回对象类和数据库对象类。

在这里插入图片描述
5. RecycleView:包含和recylerview相关的类、适配器和基础的viewholder。

在这里插入图片描述

  1. Service:包含api服务相关函数。

在这里插入图片描述

四、采用技术及原因

1.ViewPager+Fragment的使用

原因

每一个Fragment对应一个界面,使用此技术来显示界面,能够更流畅地在各个界面之间完成切换,比如主界面的书架、排行榜、分类就是利用3个Fragment来显示的,再增加RadioGroup作为导航栏,就能够实现类似于微信主界面一样的效果了,各个界面之间切换流畅,具有美感

方法

使用的方法就是在布局中添加ViewPager:

再在Activity中设置Adapter、FragmentList:

private ViewPager viewPager;private List fragmentList = new ArrayList<>();private TabFragmentStatePagerAdapter fragmentPagerAdapter;//初始化Fragment//...fragmentList.add(bookShelfFragment);fragmentList.add(rankingFragment);fragmentList.add(categoryFragment);

设置ViewPager:

viewPager.setOnPageChangeListener(new MyPagerChangeListener());fragmentPagerAdapter = new TabFragmentStatePagerAdapter(getSupportFragmentManager(), fragmentList);viewPager.setAdapter(fragmentPagerAdapter);viewPager.setCurrentItem(0);viewPager.setOffscreenPageLimit(2);

2.RadioGroup实现导航栏

原因

只有单纯的滑动切换Fragment给用户的提示信息还不够,界面也不够美观,Fragment的分离也不够明显。实现一个导航栏能够让用户明确每一个Fragment的作用。这也是当前许多主流App的做法。

方法

利用RadioButton的android:button="@null"这个属性来把圆形按钮去掉,再利用android:drawableTop="@mipmap/bookshelf"属性来给RadioButton显示不同的图片:

在RadioButton被选中时,还需要设置字体的颜色以及改变图片颜色,以达到被选中的效果。这可以在RadioGroup的监听事件中来实现,注意需要设置图片的大小,否则会不适配,设置的方法为:

RadioButton的选中与ViewPager切换帧需要结合起来,才能达到导航栏的效果。

在切换选中的RadioButton时,要修改ViewPager当前显示的帧;在切换ViewPager显示的帧时,要修改被选中的RadioButton。

3.Retrofit的网络加载框架

其底层使用OKHttp封装,支持rxjava
原因

  • 解耦,减少API接口定义和API接口使用的耦合
  • 包含许多注解,简化代码,方便使用
  • 支持同步、异步、RxJava
  • 可以使用不同工具解析数据,如json、xml
  • 请求速度快

方法

接口类:

@GET("/ranking/gender")Call getAllRanking();
OkHttpClient build = new OkHttpClient.Builder()        .connectTimeout(2, TimeUnit.SECONDS)        .readTimeout(2, TimeUnit.SECONDS)        .writeTimeout(2, TimeUnit.SECONDS)        .build();// 用于API访问Retrofit retrofitForApi = new Retrofit.Builder()        .baseUrl(ApiUrl)        // 设置json数据解析器        .addConverterFactory(GsonConverterFactory.create())        // RxJava封装OkHttp的Call函数,本质还是利用OkHttp请求数据        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())        .client(build)        .build();

4.设置同步变量控制线程顺序

原因

当输入速度特别快时,有的线程清空了list,而有的线程正在调用list里的元素,这样会发生访问异常,需要设置同步变量使得同一时刻只有一个线程在运行。

方法

flag = true; //用于同步问题的布尔变量if (!s.equals("") && flag) {    new Thread(new Runnable() {        @Override        public void run() {            flag = false;            ...        }    }}

5.将多个列表放在一个activity下

原因

将不同列表放入多个activity里可以使得界面布局简单,但是带来的问题是需要增加许多activity之间的通信,增加了跳转的复杂度,而将列表放入同一个activity里方便跳转时的信息传递。

方法

//设置可见if (!isSubmit) {    if (s.equals("")) {        initialLayout.setVisibility(View.VISIBLE);        searchLayout.setVisibility(View.GONE);    }    else {        initialLayout.setVisibility(View.GONE);        searchLayout.setVisibility(View.VISIBLE);        fuzzyList.setVisibility(View.VISIBLE);        resultList.setVisibility(View.GONE);    }}

6.系统广播获取系统电量和时间

原因

用户进入阅读界面时是全屏阅读,顶部状态栏会消失,那么需要有个信息栏来简要显示系统电量和时间

方法

  1. onCreate 中注册广播,接受电量和时钟变化,并创建自定义的广播接收者MyReceiver类来处理订阅
//注册广播接受者java代码intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);    // 电量变化广播intentFilter.addAction(ACTION_TIME_TICK);//创建广播接受者对象myReceiver = new MyReceiver();//注册receiverregisterReceiver(myReceiver, intentFilter);
  1. 自定义广播接收者类,处理电量和时钟变化广播
class MyReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        if(Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){            //获取当前电量            int level = intent.getIntExtra("level", 0);            //电量的总刻度            int scale = intent.getIntExtra("scale", 100);            //把它转成百分比            int percent = level*100/scale;            // TODO: Do Something when battery_changed        }        else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {            // TODO:Do Something when time_tick        }    }}
  1. onDestroy 中注销广播订阅
unregisterReceiver(myReceiver);

7.非注销生命周期的横竖屏切换

原因

  1. 小说阅读需要适应用户阅读习惯,有时候用户需要横屏阅读,因此需要实现阅读界面横竖屏模式切换
  2. 如果不设置上面第1步的代码,那么横竖屏切换会重新注销Activity,即结束当前活动的生命周期并重新开启一个新的声明周期。这样不仅需要时间重新进行网络访问获取小说章节内容,而且会影响到用户的使用体验。

方法

  1. AndroidManifest.xml 中对Activity 设置属性(关键)
android:configChanges="orientation|keyboardHidden|screenSize"android:screenOrientation="portrait"
  1. 横竖屏切换后台java代码

切换到横屏

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

切换到竖屏

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

五、应用部署

下载好源代码之后,通过android studio部署到手机或模拟器即可,或直接安装report目录下的apk文件。对android studio版本没有具体要求。

在这里插入图片描述

注:应用开发测试环境的sdk版本最低为22,最高为28。

六、运行截图

运行项目,进入主界面,显示的是本地书架,此时我们已经添加了四本书籍。

在这里插入图片描述

第三本看完了,我们长按将它删除。

在这里插入图片描述

点击右上角图标,进入搜索界面,输入作者或者书名查找,底下是大家都在搜的关键词,可以刷新。还有搜索历史,可以删除。

在这里插入图片描述

进入排行榜,可以选择性别,然后查看各排行,比如最热榜、完结榜。

在这里插入图片描述
在这里插入图片描述

进入具体的榜单后,顶部导航栏还分为周榜、月榜和总榜。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

点击任意书籍,进入详情界面,有阅读人次、留存率、简介和同类推荐等。

在这里插入图片描述

选择加入书架,就将书籍放到了书架中。选择免费阅读,api当前没有该书的版权,推荐我们直接下载软件看小说。

在这里插入图片描述

别着急退出,点击屏幕中央,弹出底部功能菜单,可以设置日夜模式、很竖屏切换和字体大小。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

进入分类导航栏,这里有几百万本书籍,真的看不过来了。

在这里插入图片描述

点进任意分类,会进入具体分类界面,显示顶部导航栏和书籍列表。

在这里插入图片描述
在这里插入图片描述

回到书架导航栏,可以看到刚刚添加进来的所有书籍。

在这里插入图片描述

七、源码获取

♻️下面两种方式都可以获取源代码
1️⃣ 点击直接下载 Android Studio 小说阅读App
2️⃣关注公众号《 萌新加油站 》,后台回复: 小说

🚀这有你错过的精彩内容
Android Studio实现外卖订餐系统
Android Studio实现考试管理系统
Android Studio实现天气预报系统
Android Studio实现图书馆订座系统
Android Studio实现前后台分离的选课系统

生命里最重要的事情是要有个远大的目标,并借助才能与坚持来完成它。——歌德

来源地址:https://blog.csdn.net/qq_42257666/article/details/127534755

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android Studio实现一个小说阅读App

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android Studio实现一个小说阅读App

应用目录 一、基本信息二、功能介绍1. 主界面2. 排行榜界面3. 分类界面4. 搜索界面5. 书籍详情界面6. 阅读界面7. 相关书籍界面 三、类图/时序图/架构图四、采用技术及原因1.ViewPager+Fragmen
2023-08-17

荔枝小说 - 一款Android网络小说阅读器

最近由于疫情原因笔者已经在家上班1+月了,在家无聊之余想到做一款小说APP 由于笔者能力有限使用了很多开源框架并且代码能力也不是很好还望各位不喜勿喷 介绍 “荔枝”小说阅读器是使用Jsoup解析天籁小说网获取小说源实现追书收藏,支持四种翻页
2022-06-06

java怎么实现小说阅读器功能

要实现一个简单的小说阅读器功能,你可以按照以下步骤进行:创建一个小说类(Novel),包含属性如小说名称、作者、分类、章节列表等。创建一个阅读器类(Reader),包含属性如当前章节、字体大小、背景颜色等。在阅读器类中添加方法如下:打
2023-10-26

java如何实现小说阅读器功能

要实现一个基本的小说阅读器功能,可以考虑以下步骤:1. 创建一个图形界面,可以使用Java Swing或JavaFX来实现。界面可以包括一个阅读区域用于显示小说内容,一个进度条用于显示阅读进度,以及一些按钮用于控制阅读。2. 加载小说内容。
2023-08-25

Android实现阅读APP平移翻页效果

自己做的一个APP需要用到翻页阅读,网上看过立体翻页效果,不过bug太多了还不兼容。看了一下多看阅读翻页是采用平移翻页的,于是就仿写了一个平移翻页的控件。效果如下:在翻页时页面右边缘绘制了阴影,效果还不错。要实现这种平移翻页控件并不难,只需
2022-06-06

Android编程实现小说阅读器滑动效果的方法

本文实例讲述了Android编程实现小说阅读器滑动效果的方法。分享给大家供大家参考,具体如下: 看过小说都知道小说阅读器翻页有好多种效果,比如仿真翻页,滑动翻页,等等。由于某种原因,突然想写一个简单点的滑动翻页效果。在这里写出来也没有什么意
2022-06-06

Java怎么实现在线小说阅读系统

本篇文章给大家分享的是有关Java怎么实现在线小说阅读系统,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。环境配置Jdk1.8 + Tomcat8.5 + mysql + Ecl
2023-06-29

Java如何实现小说在线阅读系统

这篇文章给大家介绍Java如何实现小说在线阅读系统,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、项目简述功能包括(管理员和游客角色):1:用户及主要操作功能 游客可以浏览网站的主页,但是需要注册为会员后部分小 说才
2023-06-25

记一次用Android studio开发一个小型对话机器人app

前言 偶然在网上看到一个免费机器人接口,所以生此想法,接口地址:http://api.qingyunke.com/,Android开发比爬虫要繁琐得多,所以本文我将细说接口的调用方法,读者可根据思路去网上找一些免费接口拿来玩,其他代码一带而
2022-06-06

怎么在Android Studio中实现一个搜索栏

这篇文章将为大家详细讲解有关怎么在Android Studio中实现一个搜索栏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.引入布局如果在每一个Activity的布局中都编写一个搜索栏,
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录