成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Android中如何實(shí)現(xiàn)折紙動(dòng)畫

本篇內(nèi)容主要講解“Android中如何實(shí)現(xiàn)折紙動(dòng)畫”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Android中如何實(shí)現(xiàn)折紙動(dòng)畫”吧!

在福海等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需求定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,福海網(wǎng)站建設(shè)費(fèi)用合理。

布局的實(shí)現(xiàn)

設(shè)計(jì)的第一個(gè)元素是可以對(duì)折的布局。我們的做法相當(dāng)大膽:主布局(FoldableItemLayout)只包含一個(gè)特定的布局(在baselayout)。在動(dòng)畫中,BaseLayout將它的內(nèi)容寫入到緩存中,這是一個(gè)根據(jù)原始布局的尺寸專門創(chuàng)建的Bitmap對(duì)象。

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);     } }

此外,還需要兩個(gè)額外的視圖(PartView)——用于圖像的上、下兩半部分。它們將在緩存中顯示對(duì)應(yīng)的數(shù)據(jù),這些數(shù)據(jù)代表了該圖像(Bitmap)的上半部和下半部。兩個(gè)視圖填充了主布局的整個(gè)區(qū)域,但只顯示所需的部分。為了達(dá)到這種效果,我們計(jì)算了位圖的界限——在onDraw()方法中,我們讓畫布通過(guò)[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))方法來(lái)繪制所需的部分。

然后通過(guò)setRotationX()方法設(shè)置相應(yīng)的角度,設(shè)法旋轉(zhuǎn)這些額外的視圖,從而實(shí)現(xiàn)圖像上半部和下半部的獨(dú)立旋轉(zhuǎn)。為了實(shí)現(xiàn)這個(gè)功能,我們?yōu)镕oldableItemLayout添加了一個(gè)名為FoldRotation的新參數(shù)。

FoldRotation參數(shù)范圍是(-180,180]:

  • FoldRotation=0:兩個(gè)部分都不旋轉(zhuǎn)。在這種情況下,我們可以跳過(guò)位圖緩存,實(shí)時(shí)的顯示原始的布局。

  • 0 <FoldRotation<90:下層的部分旋轉(zhuǎn)到 FoldRotation角度;上層部分不旋轉(zhuǎn)。

  • -90<FoldRotation<0:只有上層部分旋轉(zhuǎn)。

  • 90&le;FoldRotation<180:下層部分不再顯示。在這種情況下,包含下一布局的FoldableItemLayout應(yīng)該覆蓋當(dāng)前的FoldableItemLayout。

  • -180<FoldRotation&le;-90:上層部分不再顯示。在這種情況下,包含先前的布局FoldableItemLayout應(yīng)該覆蓋當(dāng)前的FoldableItemLayout。

  • FoldRotation=180:兩個(gè)部分都隱藏。

現(xiàn)在有了一個(gè)二層布局,能夠“折疊”它包含的元素,這樣就可以做出一個(gè)FoldableListLayout&mdash;&mdash;一個(gè)類似列表視圖的布局,它創(chuàng)建列表元素,并通過(guò)使用BaseAdapter將其封裝成FoldableItemLayout。在這種情況下,我們還使用了FoldRotation參數(shù)用來(lái)確定元素在列表中的位置。

例如,F(xiàn)oldRotation=  30,列表***個(gè)元素(FoldableItemLayout)的FoldRotation值為30,而第二個(gè)元素&mdash;&mdash;FoldRotation=  150,最多可以同時(shí)顯示不超過(guò)2個(gè)元素。FoldRotation參數(shù)值的范圍依賴于元素的數(shù)量:如果列表包含一個(gè)元素,那么取值范圍就會(huì)是 [0,0],2&mdash;&mdash;[0,180],3&mdash;&mdash;[0,360]等。

打開動(dòng)畫

在學(xué)會(huì)了在幾個(gè)元素之間使用折疊動(dòng)畫滾動(dòng)之后,我們解決了這個(gè)重大的挑戰(zhàn):從任意的起點(diǎn)生成元素的打開動(dòng)畫。利用已經(jīng)實(shí)現(xiàn)的 FoldableListLayout, 并使其在兩個(gè)元素之間進(jìn)行切換:封面布局和詳情布局。這兩種元素都應(yīng)該顯示在屏幕上,但詳情元素應(yīng)該是隱藏的。當(dāng)用戶點(diǎn)擊一個(gè)封面元素時(shí),應(yīng)用程序會(huì)記住 當(dāng)時(shí)的位置,并使用相同大小的空占位符視圖取代它(以免破壞屏幕上的其他元素),并移動(dòng)蓋元素的下半專門創(chuàng)建的布局。以后這種布局將被用作 FoldableListLayout的***個(gè)元素。第二個(gè)元素將被替換為空占位視圖,與封面元素的方式相同。

對(duì)齊

眼見(jiàn)封面元素已經(jīng)從屏幕上的最初位置展開,因此在動(dòng)畫過(guò)程中我們的FoldableListLayout需要在封面元素和詳情元素的位置之間移動(dòng)。這就是為什么要記住在動(dòng)畫初始化過(guò)程中每個(gè)元素的初始位置和大小的原因。由于封面和詳情的大小有可能不同,我們需要在動(dòng)畫期間同時(shí)擴(kuò)展它們,以便使它們的寬度一致。

到此,相信大家對(duì)“Android中如何實(shí)現(xiàn)折紙動(dòng)畫”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

標(biāo)題名稱:Android中如何實(shí)現(xiàn)折紙動(dòng)畫
文章路徑:http://jinyejixie.com/article28/ghhccp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、企業(yè)網(wǎng)站制作、網(wǎng)站營(yíng)銷、微信小程序、網(wǎng)站維護(hù)、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
金秀| 上林县| 凤庆县| 南靖县| 鄢陵县| 太仓市| 房产| 噶尔县| 屏南县| 万全县| 平凉市| 进贤县| 泊头市| 望谟县| 乌海市| 都昌县| 南丹县| 壤塘县| 托克托县| 营山县| 永德县| 苗栗县| 阿克陶县| 广昌县| 南召县| 罗定市| 临澧县| 漯河市| 临安市| 柳林县| 徐水县| 酒泉市| 安陆市| 广饶县| 彰武县| 玛纳斯县| 奎屯市| 韶山市| 邯郸县| 田阳县| 本溪市|