Android控制群組合應用七(結局,附源碼)

來源:互聯網
上載者:User

接上一篇,我們來處理一下微博中的圖片部分。

前文中我們利用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 ——

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.