智慧北京05_上拉刷新_webView_sharedSDK_圖片輪播_組圖模塊

1.1 自定義進度條java

建立自定義的xml文件android

外層根節點是一個rotate無限旋轉的動畫web

內層節點是一個shapejson

屬性圓環ring,內半徑比:innerRadius;外半徑(圓環厚度)thickness,api

在佈局文件progressBar屬性:indeterminateDrawable執行樣式文件瀏覽器

 

1.2 上拉加載更多緩存

①建立一個腳佈局服務器

 

 

②在自定義控件中初始化腳佈局微信

this.addFootView(View)網絡

腳佈局簡單一點,不用那麼多動畫

設置padding 隱藏腳佈局

 

③實現滑動狀態監聽器,重寫方法

onScrollStateChanged()滑動狀態發生改變的方法裏

當前若是是空閒狀態scrollState == SCROLL_STATE_IDIE

注意:這裏類雖然實現了回調接口,但仍是須要調用setOnScrollListener(this)方法

當處於空閒狀態的時候,若是當前最後一個可見條目是最後一個getCount()-1

顯示腳佈局

setSelection(getCount()-1)//跳到實際的最後一個條目

 

額外:須要一個標記,防止用戶重複加載更多

 

④回調接口中添加一個加載更多的方法,在觸發加載更多的位置加載更多

 

⑤經過網絡數據中表明加載更多(more)url,表明下一頁數據的連接

根據實際狀況判斷more是否爲空

若是爲空,就置爲null

在回調方法裏,判斷它是否爲nul,若是爲null提示用戶沒有更多數據了

若是不爲null,建立一個方法,代碼基本上等同於下拉刷新代碼,不過不須要緩存,由於緩存的實際上只須要一頁就夠了

 

問題1:直接解析數據以後,並非追加,而是覆蓋了第一頁

解決1:解析數據的時候加一個變量,判斷是否須要加載更多

須要加載更多,就把新的新聞列表添加到舊的集合中

 

細節1:不管有沒有更多數據,都應該隱藏腳佈局

解決2:改造調用加載完畢的方法,調用此方法,就能夠影藏腳佈局

2,標記已讀未讀

2.1 設置ListView點擊事件

注意:這裏的頭佈局是會佔位置的,實際第一個點擊條目位置是:頭佈局個數+0

而集合的位置依然是從0開始

因此position須要修正爲position-頭佈局個數(listView.getHeaderViewCount());

 

2.2 標記

經過json數據分析,每一條新聞都有一個惟一標示:id

能夠把點擊過的新聞id保存在sp

經過一個鍵值對判斷是否已經點擊過

read_ids(,任意名):id1,id2,id3(,」,」符號拼接)

注意:默認值不能是null,由於在第一次添加後,null+」」>>>>>>>>字符串「null」

 

問題1:重複添加的可能

解決1:判斷字符串中是否包含(contains)了當前id,若是包含了就不添加

 

拿到被點擊的文本控件,經過參數View(被點擊的條目)找到文本控件,修改顏色.

(這樣作算是局部刷新,也能夠經過適配器重繪notifyDataSetChanged()全局刷新)

 

在適配器中要回顯點擊狀態

 

3,建立新聞詳情頁

 

 

當一個頁面與上一個頁面幾乎沒有任何關係(樣式,功能等差距明顯)Activity

注意:Activity是全屏的,不能作內嵌的控件

 

參考名:NewsDetailActivity

①佈局文件

標題欄,能夠引入前面的標題欄進行修改

 

 

若是是對標題欄進行修改,通常狀況下隱藏掉,在新聞詳情頁中找到並進行顯示

②頁面跳轉

點擊條目以後,mAcitivity.startActivity(intent)//跳轉頁面

 

WebView控件使用

在佈局中添加這個控件

在類中找到它

mWebView.loadUrl(url);//加載url,會平鋪整個頁面

mWebView.getSetting()//獲取全部設置功能

setting.setBuiltInZommControls(true)//顯示縮放按鈕

 

細節1:但願雙擊放大:

解決1:setting.setUseWideViewPort(true);

 

細節2:WebView默認是禁止js的  javaScript

解決2:setting:.setJavaScriptEnabled(true);

 

細節3:各類點擊跳轉瀏覽器,用戶體驗很差,但願通常狀況在都在本頁面進行處理

解決3:mWebView.setWebViewClient(new WebViewClient(){//設置web控件監聽

 

onPageStarted()//頁面開始加載調用

 

onPageFinished()//網頁加載結束

 

shouldOverrideUrlLoding()//全部的跳轉連接都會走此方法

經過參數view.loadUrl(url)//在跳轉頁面前,強制在當前頁面加載

return true;//去掉super.xxx

})

加載的時候顯示進度條,在佈局中webView上壓一個進度條,控件監聽方法中限定生命週期.

 

細節4:但願返回上一頁

解決4:經過按鈕,設置跳轉

          mWebView.goBack()//跳到上個頁面

  mWebView.goForward()//跳到下個頁面

 

細節5:但願知道網頁加載進度

解決5:mWebView.setWebChromeClient(new WebChromeClient(){

onProgressChanged()// 參數int,表明進度值

onReceivedTitle()//參數String,表明網頁標題

});

 

4.WebView使用場景:

須要使用網頁的部分

不少的客戶端都是用WebView進行加載

經過設置>>開發者選項>>顯示佈局邊界,能夠判斷一個app是用的WebView仍是系統原生的控件製做的(Html5很強大,能夠模擬出相似android控件同樣的效果)

實際開發中,網頁由服務器端人員開發的.WebView加載的.

 

5,加載新聞頁面,設置字體大小

①加載新聞頁面:經過intent攜帶url過去

加載完了以後發現沒有縮放按鈕和點擊縮放

是由於這是Web網頁,專門針對手機屏幕進行適配的

 

②設置按鈕點擊事件

返回按鈕:直接finish();關閉當前頁面就是

 

字體按鈕:彈出一個對話框(alertDialog),讓用戶選擇字體.

AlertDialog.builder builder

builder.setSingleChoiceItems(items,checkedItem.listener);

Items,單選框顯示的文本

checkedItem,默認選中的條目

listener監聽器

 

而後再設置確認,取消按鈕(取消按鈕的話,能夠不設置監聽器,它會本身取消)

 

用戶點了肯定以後,根據選擇的字體,修改WebView的字體大小

 

注意:這裏選中的條目,並非肯定按鈕傳遞的參數,而是設置單選條目監聽回調的參數.

建立一個變量記錄下它(臨時選中的)

最後在確認按鈕中,判斷臨時選中的按鈕,用另外一個變量記錄(確認選中)下它

 

修改字體大小:setting.setTextSize(TextSize.LARGEST);//枚舉的方式設置,api18後被廢棄

setting.setTextZoom(int )//經過int值設置,api18之後設置

 

細節1:不該該把默認選中條目寫死,寫成確認選中的變量值(默認2)

 

細節2:記錄到sp,選中的字體

 

6,ShaderSdk的使用,分享到其它平臺(微信,QQ,微博等)

須要註冊,相似百度SDK的使用

幫助文檔有很詳細步驟

應用程序名是指在編譯工具中顯示的名稱(英文字母),不是label中指定的名稱

生成的文件夾直接覆蓋(記得備份一下)

配置清單文件(重複的權限能夠去掉)

 

開放平臺通常都有本身的SDK支持(微信,微博,QQ)

 

修改分享時的樣式.oks.setTheme(OneKeyShareTheme.SKYBLUE);

 

7,頭條新聞自動輪播

7.1在新聞頁籤詳情頁pager,建立handler對象

 

這裏初始化handler在加載完數據以後初始化(記得判斷是否爲空,爲空才發消息,保證自動輪播邏輯只執行一次)

mhandler.sendEmptyMessageDelayed(0,3000)//發送一個延時三秒的消息

 

handler,拿到當前頁面,而後進行++,而後再mViewPager.setCurrentItem(i);

handler裏面,繼續發一個空消息//造成一個循環

 

若是currentItem等於最大索引,就讓它歸0

 

 

7.2 用戶按住輪播圖的時候,再也不繼續輪播

停下handler消息事件.

mViewPager.setOnTouchListener()//設置觸摸事件

 

當用戶按下的時候,mHandler.removeCallBacksAndMessage(null);//清空全部消息

mHandler.post(new Runable(){ //另外一種方式,不用重寫handlerMessage方法,在裏面作消息的處理就能夠了.(更新主界面之類)

Run(){} //在主線程中運行

});

 

當手指擡起的時候,繼續啓動廣告,發送一個一樣的延遲消息

 

可是當用戶在按下以後(直接滑動ListView,致使擡起事件沒法響應),不走action_up,而是走ACTION_CANCEL.

在這裏面也從新發送一次延遲消息

 

8,組圖模塊,ListView顯示組圖數據

 

 

 

①實際上佈局的時候,是一個ListView和一個GridView覆蓋

②在對應的組圖pager代碼中找到它

注意連接,與以前的是不同的,再在URL類中增長一個URL

使用xutil訪問網絡,加緩存,度緩存,打印錯誤信息等等

③解析網絡返回的JSON,建立JAVABean

ListView item佈局

 

  

看起來像一張卡片,設置margin屬性,背景圖片設置

圖片寬高要寫固定,否則佈局會亂,屬性scaleType=」centerCrop」

⑤經過Json串設置ListView適配器(BitmapUtils加載網絡圖片)

 

8.2 GridView切換顯示

①在標題欄上繼續增長一個按鈕,切換顯示ListViewGridView

在設置菜單詳情頁的方法中,若是是組圖詳情頁,就顯示切換按鈕,不然就隱藏

 

控件的傳遞:在建立組圖詳情頁的時候,就把控件傳遞過來

 

點擊事件,切換顯示ListViewGridView

 

GridViewadapterListViewAdapter是能夠共用的

相關文章
相關標籤/搜索