Android開發之神奇的Fading Edge,讓你的View更有層次感!
最近在研究Android Framework層原始碼,發現我們對原始碼的理解應該建立在對API的理解之上,如果有一些API你沒用過,那麼即使你在原始碼中見到這個東西都不知道是幹嘛的,更談不上理解了。一直以來我都很想把View的繪製方法draw詳細的走一遍,但是這裡涉及到的細節問題是在是太多了,因此,今天我們還是先來看看Fading Edge,為draw方法詳解繼續打基礎。
在這篇部落格之前,我已經陸續推出了五篇關於View繪製的文章,相信這五篇部落格對你理解本篇部落格會有幫助。
為什麼要說Fading Edge?這個在我們平時開發中並不怎麼起眼的API其實是View繪製過程中重要的一步,繞不過的坎!可是要理解原始碼,我們就得先知道這個Fading Edge到底是幹什麼的?從字面來理解,這個是實現邊緣漸變效果的,OK,那我們先來看看效果圖:
我這裡以一個滾動的TexView為例,小夥伴們看到了這種帶陰影的效果。Fading Edge也可以使用在ListView上,效果類似。OK,那我們就先來看看上面這種效果怎麼實現。
一般來說,要想實現TextView的滾動效果,很多小夥伴首先想到的方法可能都是ScrollView中巢狀一個TextView,但是實際上,不這樣做我們依然可以實現TextView的滾動效果,我們先來看看上文中藍色TextView的滾動效果如何實現:
<TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="128dp" android:background="@color/colorPrimary" android:fadingEdgeLength="50dp" android:requiresFadingEdge="vertical" android:text="@string/content"/>
fadingEdgeLength表示陰影部分的高度,requiresFadingEdge表示陰影的方向。方向可以是水平的,也可以是垂直的。水平效果我一會再說。當然,如果我們只是在xml檔案中這樣寫,TextView還是無法滾動起來,還需要在Activity中新增如下一行程式碼,TextView才能滾動起來,如下:
tv.setMovementMethod(new ScrollingMovementMethod());
當然,我們也可以藉助ScrollView讓TextView滾動起來,這個時候只需把Fading Edge相關的屬性新增到ScrollView中即可:
<ScrollView android:layout_width="match_parent" android:layout_height="128dp" android:layout_marginTop="20dp" android:fadingEdgeLength="50dp" android:requiresFadingEdge="vertical"> <TextView android:layout_width="match_parent" android:layout_height="72dp" android:scrollbars="vertical" android:text="@string/content"/> </ScrollView>
相關屬性的含義不用我再說了吧!
OK,接下來我們再來看一個水平方向上的效果:
越到末尾的時候字的顏色慢慢變淡直到消失。OK,那麼這個效果要怎麼實現呢?看下面:
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="none"
android:background="@color/colorPrimary"
android:fadingEdgeLength="200dp"
android:requiresFadingEdge="horizontal"
android:text="@string/content"/>
OK,除此之外,最後我們再來看看Fading Edge在ListView中的使用吧。先來看看效果圖:
其實在Fading Edge使用時候,ListView中這種效果算是最容易實現的一種了,我們來看看程式碼:
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fadingEdge="vertical"
android:fadingEdgeLength="200dp"
android:requiresFadingEdge="vertical"></ListView>
資料繫結就是普通的繫結方式,不贅述。
OK,這就是我們View中Fading Edge的一個簡單使用,先記錄下來,為後面全面分析draw方法打下基礎。
以上。