仿网易新闻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. Nginx gzip配置详解

    gzip决定是否开启gzip模块param:on|offexample:gzip on; gzip_buffers 设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间param1:intp ...

  2. (转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

    昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类, ...

  3. linux nginx安装(转载)

    1.linux 下面安装 1.下载 pcre-8.10.tar.gz  nginx-1.1.1.tar.gz 2.安装 pcre 让nginx支持rewrite pcre-8.10.tar.gz  上 ...

  4. 原生JS取代一些JQuery方法

    1.选取元素 // jQuery var els = $('.el'); // Native var els = document.querySelectorAll('.el'); // Shorth ...

  5. [WebService]之TCPMon的使用

    TCPMon是apache下的一个项目,下载地址:http://ws.apache.org/commons/tcpmon/download.cgi (1)功能: TCPMon可以拦截客户与服务之间的H ...

  6. 第一百九十三天 how can I 坚持

    我以为我是谁. 你可以记录你今天看了电影 也可以记录你最近在听什么歌 但这都会成为回忆 .  ---oncelife 快受不了了啊.咋办. 今天看了<滚蛋吧,肿瘤君>,还看了<那山那 ...

  7. 一个效果很华丽的仿桌面APP,却胜似Launcher

    开发Android APP的同学是否对于Launcher实现的绚丽效果而痴迷呢?什么,连Android Launcher是什么都不知道.好吧,拿起侬的手机,在解锁后的首页界面上左右滑动滑动,体验体验, ...

  8. invoking gdb

    [invoking gdb] The most usual way to start gdb is with one argument, specifying an executable progra ...

  9. V7承保 bug代码

    v7 bug1

  10. Web Service实现分布式服务的基本原理

    简单的说, 就是客户端根据WSDL 生成 SOAP 的请求消息, 通过 HTTP 传输方式(也可以是其它传输方式, 如 FTP 或STMP 等,目前 HTTP 传输方式已经成为 J2EE Web Se ...