文章图片标题

基于Android平台的新闻客户端附报告 源码下载

分类:android源码 作者:阿流 评论:0 点击: 1,908 次 发布时间:2018-09-13

题目

功能要求:参考网易新闻或百度新闻等客户端

实现要求:客户端基于Android Studio平台实现,服务端技术自定(也可采用第三方接口)

源码介绍

一款仿网易新闻客户端的android app,效果不错,包括了新闻列表,新闻详情以及在线视频播放,效果如图:

      

技术实现

滑动标签

APP总体底部的4个Fragment切换和在每个Fragment中的ViewPage切换, 采用的是LuckyJayce/ViewPagerIndicator的开源框架:地址是ViewPagerIndicator

当然,若是初次接触,建议学习SlidingTabsBasic,Google官方教程,简洁实现SlidingTab。

列表实现

新闻列表采用纵向RecyclerView,其中暂时划分为3种类型。

分别表示以下3种类型:

  • BANNER: 
  • TEXT: 
  • IMAGE: 
  • ITEM_TYPE_BANNER 采用自定义SwitchImage控件
  • ITEM_TYPE_TEXT 相对布局
  • ITEM_TYPE_IMAGE 水平RecycleView (官方版本为三张图片)

水平列表效果

本部分介绍ITEM_TYPE_IMAGE的水平滑动列表如何实现。 

经过一番努力,现已实现了列表能够响应以下三种情景:

  • 滑动ITEM_TYPE_IMAGE时: 会先根据滑动夹角判断是水平滑动还是上下滑动。
    • 如果是水平滑动。滑动时,水平列表滑动。如果水平列表滑动尽头,也不会触发新闻栏目的切换。
    • 如果是垂直滑动。则相应整个列表的上下滑动。
    • 如果用户滑动很短距离(很短时间)就抬起手指,则触发点击事件。

水平列表事件冲突处理

1. 实现方式

水平滑动的处理方式一般有ViewPage,Gallery,HorizontalScrollview等几种。

这里采用在垂直RecycleView中嵌套水平RecycleView。 主要的布局结构是这样的:

2.存在问题

如果不进行如何额外的处理,那么看上去一些正常。但是每次将水平列表滑动尽头并继续滑动时,会触发Viewpage的页面切换。

趁着寒假,已经把这个问题分析处理了。 解决过程和思路完全复盘,值得一看!

但是当我想对水平RecyclerView中的某张图片进行点击时,出现了onClick函数没有回调的问题,由于笔者水平和时间有限,暂时没有深究这个问题。

于是采用了onTouch函数做点击响应的回调, 做了如下简单的判断:

用户是点击图片还是水平滑动RecyclerIView

基于自定义Volley预加载和回调刷新

目前效果

首次打开APP时,先显示缓存内容,然后同时请求网络,显示最新内容。

最简单的实现方案

一般的话,可能会使用数据库之类的存储结构来保存历史新闻。但是,我想简化这个过程,依赖于网络请求框架的缓存来实现。

一开始想的是给修改Volley源码,为Response.Listener(T response)接口增加一个回调方法onCacheHit(T response)方案,如以下代码所示。

不过,经过阅读Volley的源码,发现可以通过修改一个Response的softTTL和TTL来实现以上想法。

于是根据这个想法,修改出了一个HandyVolley的框架,使用文档见于此处--HandyVolley,并发布于Jcente仓库中:

compile 'site.okhttp.codeyel:HandyVolley:1.0.3'

当然,除了用TextView来展示Html(在Android 中就是Spanned类),也可以使用WebView。 两者的主要区别:

  • WebView:加载HTML更为方便(笔者觉得),支持的标签更多,与APP交互需要通过JS接口
  • TextView: 除了文本显示,对于其他很多交互行为,需要重写函数。开发者对展示细节的控制能力更强。 详细内容可以参考:这里

数据请求与相应

采用的是Volley框架,并封装了RequestSingletonFactory工厂类来方便请求。 URLs类中采用反射的方式来读取静态URL的数据。

 

 





声明: 本文由( 阿流 )原创编译,转载请保留链接: http://www.daimabuluo.com/source/android-source/174.html

基于Android平台的新闻客户端附报告 源码下载:等您坐沙发呢!

发表评论