android - 自定義下拉刷新列表.
問題描述
這里面的代碼看不懂什么意思
public class MyListe extends ListView {
private View v;private int height;int anxiaY;int huadongY;@TargetApi(Build.VERSION_CODES.JELLY_BEAN) public MyListe(Context context, AttributeSet attrs) { super(context, attrs); v = View.inflate(context, R.layout.item2, null); v.measure(0, 0); height = v.getMeasuredHeight(); v.setPadding(0, -height, 0, 0); addHeaderView(v);}@TargetApi(Build.VERSION_CODES.HONEYCOMB) @Overridepublic boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN:anxiaY = (int) ev.getY();break; case MotionEvent.ACTION_UP:setPadding(0, -height, 0, 0);v.invalidate();invalidate();break; case MotionEvent.ACTION_MOVE:huadongY = (int) ((ev.getY()-anxiaY)*0.3);setPadding(0, huadongY-height, 0, 0);v.invalidate();invalidate();break; } return super.onTouchEvent(ev);}
}
問題解答
回答1:不知道你是哪部分沒看懂還是都看不懂,這段代碼其實并沒多復(fù)雜,把它分解一下就好理解了。我分兩部分說一下。
一是構(gòu)造器構(gòu)造器初始化向listview裝載一個headerview,困惑之處可能在于measure和setPadding,一個view加載出來若尚未可見,它的width和height會是-1,所以需要手動調(diào)用measure去強制measure一下view的空間占用情況,目的是為了拿到height為setPadding做準(zhǔn)備;到了setPadding,參數(shù)構(gòu)成是left, top, right, bottom,傳入的是top參數(shù),請看好是-height,在android上,view的位置并非只有屏幕上可見的那點空間,它可以抽象延伸到屏幕外更寬廣的區(qū)域,所以-height的意思是設(shè)置view的左上角的位置為屏幕外height,意思就是讓headerview初始化時不顯示在屏幕可見范圍內(nèi),看我畫的草圖可能好理解一點,草圖左上角黃點就是構(gòu)造器初始化后的坐標(biāo)示意。
二是touch事件處理構(gòu)造器添加的不可見headerview如何顯示?是不是就是改變headerview的paddingTop值就可以了?是的,就是那樣!那怎么時候改變,改變多少?是不是就是應(yīng)該手指在listview上滑動多少就改變多少呢?是的,就是那樣,了解這個過程,再看touch事件處理就很好理解了。ACTION_DOWN即手指按下的動作,anxiaY即是按下的點的y坐標(biāo),ACTION_MOVE即手指滑動的動作,記錄滑動過程手指觸點y坐標(biāo)的變化,和anxiaY值做比較,就得出手指滑動的距離,就可以做下拉動作了,不斷的設(shè)置headerview的paddingTop值和刷新view,就可以達(dá)到headerview跟隨手指滑動距離滑入或滑出屏幕了。ACTION_UP即手指觸點離開屏幕,停止滑動,這時重新設(shè)置paddingTop值為-height,headerview就復(fù)位了,整體離開屏幕,回到構(gòu)造器初始化時的位置,完成整個下拉過程。
回答2:構(gòu)造里面過去高度,然后監(jiān)聽Touch事件,更新頭部位子
相關(guān)文章:
1. javascript - sublime快鍵鍵問題2. javascript - immutable配合react提升性能?3. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問?4. javascript - nodejs關(guān)于進程間發(fā)送句柄的一點疑問5. css - 寫頁面遇到個布局問題,求大佬們幫解答,在線等,急!~6. 實現(xiàn)bing搜索工具urlAPI提交7. javascript - 移動端上不能實現(xiàn)拖拽布局嗎?8. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽數(shù)據(jù)變化9. 配置Apache時,添加對PHP的支持時語法錯誤10. phpstudy8.1支持win11系統(tǒng)嗎?

網(wǎng)公網(wǎng)安備