【移動應(yīng)用開發(fā)技術(shù)】android仿QQ個人主頁下拉回彈效果_第1頁
【移動應(yīng)用開發(fā)技術(shù)】android仿QQ個人主頁下拉回彈效果_第2頁
【移動應(yīng)用開發(fā)技術(shù)】android仿QQ個人主頁下拉回彈效果_第3頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】android仿QQ個人主頁下拉回彈效果

先看效果:

效果不錯吧!進入主題之前,先了解ImageView的scaleType的center_crop,網(wǎng)絡(luò)上說的已經(jīng)很清楚了:以下抄自網(wǎng)絡(luò):1.Android:scaleType=”centerCrop”

以填滿整個ImageView為目的,將原圖的中心對準(zhǔn)ImageView的中心,等比例放大原圖,直到填滿ImageView為止(指的是ImageView的寬和高都要填滿),原圖超過ImageView的部分作裁剪處理。均衡的縮放圖像(保持圖像原始比例),使圖片的兩個坐標(biāo)(寬、高)都大于等于相應(yīng)的視圖坐標(biāo)(負(fù)的內(nèi)邊距)。圖像則位于視圖的中央。在XML中可以使用的語法:android:scaleType=”centerCrop”。不說廢話,直接進入主題?。∷悸?.先將topView的布局和listview平級,然后將topview以及topview包裹的imageView中傳listview,即一般是activity的layout

2.重寫listView的ontoucEvent()方法,但不做任何攔截,只在action時,控制imageView以及topView的高度,使其重新layout然后重新布局就可以了。

3.以上是大概思路,這里具體分析:當(dāng)action_down時記錄其初始位置,action_move時得到dy,通過dy來判斷是上啦還是下拉:

(1)dy>0,則是下拉,不斷重新設(shè)置topView和imageView的高度,又因為imageView的scaleType=center_crop,所以圖片會按照這個規(guī)則進行等比拉伸,當(dāng)?shù)竭_(dá)圖片最大時就會有不斷放大的過程

當(dāng)松開手或者手指移出屏幕外時(action_up|action_outside|action_cancel)時讓其回到初始位置,并伴著回彈過程,這里通過自定義動畫讓其具備回彈效果

(2)dy<0,則是上拉,上推的過程,由于topView和Imageview不具備滾動的效果,所以上推也是通過控制topView和ImageView的高度,并且當(dāng)TopVIew和ImageView滑出屏幕時就不在更改高度防止不斷的繪制,提高性能。

ok,大體思路就這樣。具體分析代碼如下:實現(xiàn):activity的xml

stretch_act.xml:

看看StretchListView:通過這個對外的方法,將topView以及ImageView的id傳進來分析:重新ListView的onTouchEvent():只是進行一些初始化操作:

1.startY:相對于屏幕頂部的高度

2.childAt0Top,獲取listview的第一個view的top距離、

3.ivInitHeight:獲取ImageView的初始高度,即剛進來時的高度

ACTION_MOVE:當(dāng)下拉時:主要條件如下:1.dy>0&&0==getFirstVisiblePosition()&&childAt0Top==

getChildAt(0).getTop()

意思是當(dāng)下拉時,并且listview的第一個位置顯示全了,才能下拉放大圖片,這是避免,listview已經(jīng)發(fā)生滾動了,需要回到初始位置才能下拉放大,否則會出現(xiàn),立即下拉放大,體驗不好

2.當(dāng)上拉時主要條件

if(translationY<=0&&currHeight>0)

currHeight>0:當(dāng)前ImageView的高度,如果已經(jīng)滾動到頂部或者超出,則不再進行滾動,防止已經(jīng)滾出屏幕不可視了,還在進行滾動。

translationY<=0:這個值是滾動的距離,這個距離不能超過ImageView的高度,由于上拉時dy是負(fù)值,所以要判斷是否小于0;其主要方法如下:

ACTION_UP:isChangedHeight:當(dāng)發(fā)生ImageView發(fā)生改變,并且是下拉時,這是松開手或者手指移出屏幕,則讓其回彈到初始位置;這里是通過自定義動畫來改變其變化的高度,達(dá)到回彈效果代碼如下其實主要是applyTransformation(floatinterpolatedTime,Transformationt)這個方法

主要是通過這個漸變因子interpolatedTime來控制,其值范圍是(0~1)所以計算漸變的高度如下

intdy=(int)((ivCurrHeight-ivInitHeight)*interpolatedTime);

然后一定要記得調(diào)用topView.requestLayout(),讓其重新布局繪制。這樣就完成了,所有代碼,也就一百行代碼左右,是不是很簡單。而且通過這個demo,可以很好的拓展到scrollview中。注意:

網(wǎng)上有些demo是通過overScrollBy()這個方法中搞事情,因為其自帶dy,還有一些其它的參數(shù),應(yīng)有盡有。但是由于android系統(tǒng)是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論