差很少花了一週的時間,目前實現的了新聞下的包括頭條、體育、娛樂的一系列的新聞展現,以及點擊後進入的新聞詳情展現。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
本開源項目僅供學習,不得做爲其餘用途