新聞中心
本篇內(nèi)容主要講解“Android中如何實現(xiàn)折紙動畫”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Android中如何實現(xiàn)折紙動畫”吧!
在福海等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需求定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站制作,福海網(wǎng)站建設(shè)費用合理。
布局的實現(xiàn)
設(shè)計的第一個元素是可以對折的布局。我們的做法相當(dāng)大膽:主布局(FoldableItemLayout)只包含一個特定的布局(在baselayout)。在動畫中,BaseLayout將它的內(nèi)容寫入到緩存中,這是一個根據(jù)原始布局的尺寸專門創(chuàng)建的Bitmap對象。
class FoldableItemLayout extends FrameLayout { @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { Bitmap cacheBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); mBaseLayout.setCacheCanvas(new Canvas(cacheBitmap)); } } class BaseLayout extends FrameLayout { private Canvas mCacheCanvas; private void setCacheCanvas(Canvas cacheCanvas) { mCacheCanvas = cacheCanvas; } @Override public void draw(Canvas canvas) { mCacheCanvas.drawColor(0, PorterDuff.Mode.CLEAR); super.draw(mCacheCanvas); } }
此外,還需要兩個額外的視圖(PartView)——用于圖像的上、下兩半部分。它們將在緩存中顯示對應(yīng)的數(shù)據(jù),這些數(shù)據(jù)代表了該圖像(Bitmap)的上半部和下半部。兩個視圖填充了主布局的整個區(qū)域,但只顯示所需的部分。為了達(dá)到這種效果,我們計算了位圖的界限——在onDraw()方法中,我們讓畫布通過[drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)](http://developer.android.com/reference/android/graphics/Canvas.html#drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.RectF, android.graphics.Paint))方法來繪制所需的部分。
然后通過setRotationX()方法設(shè)置相應(yīng)的角度,設(shè)法旋轉(zhuǎn)這些額外的視圖,從而實現(xiàn)圖像上半部和下半部的獨立旋轉(zhuǎn)。為了實現(xiàn)這個功能,我們?yōu)镕oldableItemLayout添加了一個名為FoldRotation的新參數(shù)。
FoldRotation參數(shù)范圍是(-180,180]:
FoldRotation=0:兩個部分都不旋轉(zhuǎn)。在這種情況下,我們可以跳過位圖緩存,實時的顯示原始的布局。
0
-90
90≤FoldRotation<180:下層部分不再顯示。在這種情況下,包含下一布局的FoldableItemLayout應(yīng)該覆蓋當(dāng)前的FoldableItemLayout。
-180
FoldRotation=180:兩個部分都隱藏。
現(xiàn)在有了一個二層布局,能夠“折疊”它包含的元素,這樣就可以做出一個FoldableListLayout——一個類似列表視圖的布局,它創(chuàng)建列表元素,并通過使用BaseAdapter將其封裝成FoldableItemLayout。在這種情況下,我們還使用了FoldRotation參數(shù)用來確定元素在列表中的位置。
例如,F(xiàn)oldRotation= 30,列表***個元素(FoldableItemLayout)的FoldRotation值為30,而第二個元素——FoldRotation= 150,最多可以同時顯示不超過2個元素。FoldRotation參數(shù)值的范圍依賴于元素的數(shù)量:如果列表包含一個元素,那么取值范圍就會是 [0,0],2——[0,180],3——[0,360]等。
打開動畫
在學(xué)會了在幾個元素之間使用折疊動畫滾動之后,我們解決了這個重大的挑戰(zhàn):從任意的起點生成元素的打開動畫。利用已經(jīng)實現(xiàn)的 FoldableListLayout, 并使其在兩個元素之間進(jìn)行切換:封面布局和詳情布局。這兩種元素都應(yīng)該顯示在屏幕上,但詳情元素應(yīng)該是隱藏的。當(dāng)用戶點擊一個封面元素時,應(yīng)用程序會記住 當(dāng)時的位置,并使用相同大小的空占位符視圖取代它(以免破壞屏幕上的其他元素),并移動蓋元素的下半專門創(chuàng)建的布局。以后這種布局將被用作 FoldableListLayout的***個元素。第二個元素將被替換為空占位視圖,與封面元素的方式相同。
對齊
眼見封面元素已經(jīng)從屏幕上的最初位置展開,因此在動畫過程中我們的FoldableListLayout需要在封面元素和詳情元素的位置之間移動。這就是為什么要記住在動畫初始化過程中每個元素的初始位置和大小的原因。由于封面和詳情的大小有可能不同,我們需要在動畫期間同時擴(kuò)展它們,以便使它們的寬度一致。
到此,相信大家對“Android中如何實現(xiàn)折紙動畫”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
當(dāng)前題目:Android中如何實現(xiàn)折紙動畫
分享路徑:http://www.ef60e0e.cn/article/ghhccp.html