接上一篇,我們來處理一下微博中的圖片部分。
前文中我們利用WebView來處理URL中的圖片顯示,並且基本能達到目標,但是還是有一兩處細節需要處理,以提升使用者體驗。
一是在下載圖片的過程中需要顯示一個背景圖,讓使用者Crowdsourced Security Testing道那裡會出現圖片,而不是一片空白。
二是圖片下來以後,要根據圖片的大小動態調整顯示效果,不能出現WebView太大而圖片太小時的白邊。
由此,我們從WebView繼承一個PictureWebView專門解決上面這兩個問題。
首先,我們要為這個PictureWebView實現WebView.PictureListener介面,該介面提供的
public abstract void onNewPicture(WebView view, Picture picture)
方法用於在圖片改變時發出通知。代碼如下,其中的picture是一個Picture類型的成員變數。
@Override<br />public void onNewPicture(WebView view, Picture picture) {<br />if (picture!=null){<br />this.picture=picture;<br />DisplayMetrics dm=getContext().getResources().getDisplayMetrics();<br />int width=(int) (picture.getWidth()*dm.density);<br />int height=(int) (picture.getHeight()*dm.density);<br />setPictureListener(null);<br />ViewGroup.LayoutParams lp=getLayoutParams();<br />lp.width=width;<br />lp.height=height;<br />setLayoutParams(lp);<br />}<br />}
注意到這裡已經根據picture大小調整了控制項的布局。因為我們這個PictureWebView的每個執行個體針對的只是一條微博中的圖片URL,因此這裡不關注WebView中其他的可顯示元素。
接下來,為了更好的處理第二個問題,我們改寫一下onDraw()方法,進行背景和圖片的繪製。代碼如下:
@Override<br />protected void onDraw(Canvas canvas) {<br />super.onDraw(canvas);<br />if (picture==null){<br />Drawable background=this.getBackground();<br />if (background!=null){<br />background.setBounds(0,0,background.getIntrinsicWidth(),background.getIntrinsicHeight());<br />background.draw(canvas);<br />}<br />}<br />}
這樣,一個定製的WebView就實現了,修改blogview.xml布局檔案中的WebView控制項為PictureWebView即可,代碼如下:
<com.wenbin.test.PictureWebView android:id="@+id/profileImage"<br /> android:layout_width="48dp"<br /> android:layout_height="48dp"<br /> android:scrollbars="none"<br /> android:layout_alignParentLeft="true"<br /> android:background="@drawable/portrait"><br /> </com.wenbin.test.PictureWebView>
運行程式,無論是頭像還是微博中的圖片,在未下載完時是顯示背景圖的,下載完後會自動調整布局進行適應,而且不存在無用的邊框。見《Android控制群組合應用一》一文。
結語:本來想在一篇中寫完,但篇幅太長,所以分割成了這許多部分。而且也沒想到CSDN勤勞的小編在第一篇文章剛出時就蓋了“推薦”的章,然後我就開始熬夜趕工了。在代碼中沒有注重演算法之類的事情,也沒有達到商用的程度,主要還是通過模仿新浪微博的用戶端介面來靈活應用一下Android的控制項,同時也可以看到Android架構帶給開發人員的靈活程度。
附上全部的源碼和資源供參考(該程式在MOTOROLA milestone Android 2.1上進行了測試,其中的部分資源來源於新浪微博,僅供學習測試之用)。
點此下載源碼
——歡迎轉載,轉載請註明出處 http://blog.csdn.net/caowenbin ——