仿網易新聞Android端APP

 

仿網易新聞Android端APP

主要功能展現和代碼實現

差很少花了一週的時間,目前實現的了新聞下的包括頭條、體育、娛樂的一系列的新聞展現,以及點擊後進入的新聞詳情展現。html

目前效果

技術實現

框架實現

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

  • BANNER:
  • TEXT:
  • IMAGE:

其中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。
二者的主要區別:

  • WebView:加載HTML更爲方便(筆者以爲),支持的標籤更多,與APP交互須要經過JS接口
  • TextView: 除了文本顯示,對於其餘不少交互行爲,須要重寫函數。開發者對展現細節的控制能力更強。
    詳細內容能夠參考:這裏

數據網絡請求

採用的是Volley框架,並封裝了RequestSingletonFactory工廠類來方便請求。
URLs類中採用反射的方式來讀取靜態URL的數據。

接下來

  • 完善新聞閱讀的排版,對於部分網頁存在數據不兼容,致使解析的Bug
  • 增長查看新聞評論功能
  • 增長用戶設置界面

下載地址

本項目將在持續更新,更加完善,項目源碼地址:
https://github.com/freedomofme/Netease

APK安裝包下載

本開源項目僅供學習,不得做爲其餘用途

相關文章
相關標籤/搜索