仿网易新闻Android端APP

主要功能展示和代码实现

差不多花了一周的时间,目前实现的了新闻下的包括头条、体育、娱乐的一系列的新闻展示,以及点击后进入的新闻详情展示。

目前效果

技术实现

框架实现

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

列表实现

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

public static enum ITEM_TYPE {
ITEM_TYPE_BANNER,
ITEM_TYPE_IMAGE,
ITEM_TYPE_TEXT
}

分别表示以下3种类型:

  • BANNER:

  • TEXT:

  • IMAGE:

其中ITEM_TYPE_BANNER 采用SwitchImage单独控件形式(内部ViewPage实现

ITEM_TYPE_TEXT比较简单,

ITEM_TYPE_IMAGE的网易原版实现是3张图片。

列表改进

为了增加用户体验,决定替换掉ITEM_TYPE_IMAGE中三种图片,改为水平滑动形式。

现已实现了水平滑动和按钮点击响应:

当点击任意一张图片后将调转到ImageDisplayActivity:

下面我将着重描述下ITEM_TYPE_IMAGE的水平滑动实现。

想到水平滑动,我想大家肯定会想到这些控件:ViewPage,Gallery,HorizontalScrollview等等。

不过,Google近来推出的RecyclerView也支持水平滑动,那就用它来试试。

首先,垂直RecyclerView嵌入水平RecyclerView比较顺利,没有出现子列表只显示一行之类的问题,同时对水平RecyclerView滑动也没有出现问题。

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

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

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

imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//抬起按钮时判断,之前是否滑动了,若没有滑动则响应点击事件
if (event.getAction() == MotionEvent.ACTION_UP && !isMoved)
mListener.onViewPageTouch((NetworkImageView) v, index);
else {
isMoved = false;
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
isMoved = true;
}
return true;
}
});

顶部沉浸式状态栏实现

参考了这篇文章:

http://www.jianshu.com/p/f8374d6267ef

新闻详情实现

首先,根据网络返回的数据的样式确定解析方案:

NewsDisplayActivity.java第70行,展示了一个返回数据Html格式的样例:https://github.com/freedomofme/Netease/commit/bb6db85de547d4d5243e17e881bc2116122e52d6

本文采用的方法是通过Android自带的android.text.Html类解析Html和html下标签的图像。

核心代码如下:

	URLImageParser p = new URLImageParser(content, this);
Spanned htmlSpan = Html.fromHtml(body, p, null);
content.setText(htmlSpan);

其中的URLImageParser是用来解析标签的,这里有很大的进一步优化的空间。

这类主要是参考该文,并修正了图片尺寸上的问题。http://stackoverflow.com/questions/15617210/android-html-fromhtml-with-images/15617341#15617341

当然,除了用TextView来展示Html(在Android

中就是Spanned类),也可以使用WebView。

两者的主要区别:

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

    详细内容可以参考:这里

数据网络请求

采用的是Volley框架,并封装了RequestSingletonFactory工厂类来方便请求。

URLs类中采用反射的方式来读取静态URL的数据。

接下来

  • 完善新闻阅读的排版,对于部分网页存在数据不兼容,导致解析的Bug
  • 增加查看新闻评论功能
  • 增加用户设置界面

下载地址

本项目将在持续更新,更加完善,项目源码地址:

https://github.com/freedomofme/Netease

APK安装包下载

本开源项目仅供学习,不得作为其他用途

仿Android网易新闻客户端,并增加水平图片滑动,改进阅读体验的更多相关文章

  1. 类似掌盟的Tab页 Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签 (转)

    原博客地址  :http://blog.csdn.net/xiaanming/article/details/10766053 本文转载,记录学习用,如有需要,请到原作者网站查看(上面这个网址) 之前 ...

  2. Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3 ...

  3. Android Studio精彩案例(一)《ActionBar和 ViewPager版仿网易新闻客户端》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了能更好的分享高质量的文章,所以开设了此专栏.文章代码都以Android Studio亲测运行,读者朋友可在后面直接下载源码.该专栏 ...

  4. Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10766053 之前用JakeWharton的开源框架ActionBarSherlock ...

  5. Android SlidingMenu 仿网易新闻客户端布局

    前面两篇文章中的SlidingMenu都出现在左侧,今天来模仿一下网易新闻客户端左右两边都有SlidingMenu的效果,以下是网易新闻客户端效果: 不扯闲话了,直接进入正题吧 frame_conte ...

  6. Android Studio精彩案例(四)《DrawerLayout使用详解仿网易新闻客户端侧边栏 》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了提高兴趣,咱们开头先看看最终要实现什么样的效果: 侧拉菜单在Android应用中非常常见,它的实现方式太多了,今天我们就说说使用G ...

  7. [Android] Android 手机下 仿 今日头条 新闻客户端

    利用一个月的时间,自学了 Android 开发 ,为了检验学习成果,特意 开发了这个  仿 今日头条 新闻客户端 AppNews 包括图文新闻+视频新闻+图片新闻 预览演示如下: 功能说明: 1)底部 ...

  8. Android实现网易新闻客户端效果

    下面来简单实现一下网易新闻客户端左右切换的效果,当然实际项目上肯定不能这样写,还有很多需要优化的地方. activity_main.xml [html] view plaincopyprint? &l ...

  9. 分享一个仿网易新闻客户端iPhone版的标签式导航ViewController

    该Controller是一个容器,用于容纳其他的controller.效果与网易新闻客户端的标签式导航基本一样: (1)点击上面的标签,可以切换到对应的controller,标签下面的红色提示条的长度 ...

随机推荐

  1. 关于Cygwin的x-Server的自动运行以及相关脚本修改

    常常需要用到远端服务器的图形工具,如果在windows端没用xserver的话,很多程序无法运行.一个特殊的例子,emacs在没用xserver的时候,是直接在终端中打开的,如果不修改cygwin.b ...

  2. linux设置主机名

    第一种方式: hostname 在hostname 命名后面直接加想要更改的主机名,修改成功,键入hostname可以查看修改后的主机名,此种方式会立即生效,但是重启后还原.不会永久修改 第二种方式: ...

  3. Python【基础第三篇】

    set集合 s1=set() 集合特点: 访问速度快 没有重复项 collections系列(数据类型容器模块) 一.计数器(Counter) Counter是对字典类型的补充,用于追踪值的出现次数. ...

  4. mysql 的 GROUP_CONCAT

    GROUP_CONCAT 通常跟 group by 一起用,但也可以不用.例:select GROUP_CONCAT(pct_id) as pct_ids from (select max(pct_i ...

  5. windows下python的包管理器pip安装

    pip:  A tool for installing and managing Python packages. 要用到第三方包,python的版本就必须是2.7 https://pypi.pyth ...

  6. 数据库中使用 Synonym和openquery

    如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据,又该怎么办呢?那就让我为你介绍Synonym和openquery吧. ...

  7. Windows Azure使用必读(转)

    原文:http://www.cnblogs.com/dyllove98/archive/2013/06/15/3137528.html 近些日子帮了不少用户移植应用到了Windows Azure上,在 ...

  8. UVALive 5881 Unique Encryption Keys (DP)

    Unique Encryption Keys 题目链接: http://acm.hust.edu.cn/vjudge/problem/26633 Description http://7xjob4.c ...

  9. 关于设置MX记录

    简介:正确设置MX(Mail Exchanger)邮件交换记录是企业电子邮件服务稳定运行的基本条件,我们经常发现很多企业电子邮箱管理员因为设置了不符合规范的MX记录,导致重要的外部邮件退回或者丢失. ...

  10. Keil MDK Code、RO-data、RW-data、ZI-data数据段

      Program Size: Code=10848 RO-data=780 RW-data=372 ZI-data=868   Code 表示程序代码指令部分 存放在Flash区 RO-data 表 ...