差很少花了一周的时间,目前实现的了新闻下的包括头条、体育、娱乐的一系列的新闻展现,以及点击后进入的新闻详情展现。html
目前效果请访问该网页:http://www.cnblogs.com/FightForFreedom/p/4807083.htmljava
更新:目前新闻内容的详情展现已经实现android
APP整体底部的4个Fragment切换和在每一个Fragment中的ViewPage切换, 采用的是LuckyJayce/ViewPagerIndicator的开源框架:地址是https://github.com/LuckyJayce/ViewPagerIndicatorgit
新闻列表采用纵向RecyclerView,其中暂时划分为3种类型。github
public static enum ITEM_TYPE { ITEM_TYPE_BANNER, ITEM_TYPE_IMAGE, ITEM_TYPE_TEXT }
分别表示如下3种类型:web
其中ITEM_TYPE_BANNER 采用SwitchImage单独控件形式(内部ViewPage实现
ITEM_TYPE_TEXT比较简单,
ITEM_TYPE_IMAGE的网易原版实现是3张图片。网络
为了增长用户体验,决定替换掉ITEM_TYPE_IMAGE中三种图片,改成水平滑动形式。
现已实现了水平滑动和按钮点击响应:
app
当点击任意一张图片后将调转到ImageDisplayActivity:
框架
下面我将着重描述下ITEM_TYPE_IMAGE的水平滑动实现。dom
想到水平滑动,我想你们确定会想到这些控件: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。
二者的主要区别:
采用的是Volley框架,并封装了RequestSingletonFactory工厂类来方便请求。
URLs类中采用反射的方式来读取静态URL的数据。
本项目将在持续更新,更加完善,项目源码地址:
https://github.com/freedomofme/Netease
本开源项目仅供学习,不得做为其余用途