viewgroup和(hé / huò)子(zǐ)view關系爲(wéi / wèi)何暨PinnedExpandableListVie - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 技術分享 >

viewgroup和(hé / huò)子(zǐ)view關系爲(wéi / wèi)何暨PinnedExpandableListVie

發表時(shí)間:2020-11-5

發布人(rén):融晨科技

浏覽次數:38


比來(lái)正在(zài)名目爛﹄要(yào / yāo)做一改在(zài)膳春沔隐示分妝磕listview,類似于(yú)腳機裏的(de)接洽進列表。github砂實現那種成不(bù)俗的(de)坎瓞是(shì)持絕的(de)ListView。我好考的(de)代碼是(shì)持絕ExpandableListView的(de)一個(gè)叫PinnedExpandableListView的(de)類。拼蟾缁有論是(shì)持絕自ListView,還是(shì)持絕自ExpandableListView,并出(chū)有凍枘當ツ倒的(de)好别,果爲(wéi / wèi)ExpandableListView也(yě)是(shì)持絕自ListView的(de)嘛,隻是(shì)如出(chū)有雅持絕自ListView的(de)煌宮必要(yào / yāo)自兇多寫裏代碼罷了(le/liǎo)。
尾先是(shì)demo下載天紙焙http://download.csdn.net/detail/u011647962/8323335
寫那篇專客的(de)緊張方針便是(shì)記錄一下閉于(yú)那些代碼,我的(de)進建内心,特别是(shì)viewgroup跟子(zǐ)view畢竟實劉麽樣一蓋系。

1.PinnedExpandableListView的(de)實現講理。


1.1.尾先實現一噶渴拍骥,弄适拍骥必要(yào / yāo)供給PinnedExpandableListView的(de)group是(shì)可可展坷閱自逢,借需正在(zài)PinnedExpandableListView滑鬥崮時(shí)辰竄改mHeaderView的(de)中出(chū)有雅多少mHeaderView茨在(zài)背裏提到(dào))。PinnedExpandableListView持絕自ExpandableListView,正在(zài)畫造的(de)過程中,正在(zài)ExpandableListView的(de)基層再畫造一個(gè)view名曰mHeaderView,隻需那個(gè)mHeaderView取ExpandableListView的(de)group的(de)view的(de)一樣的(de)即考正在(zài)滑鬥崮時(shí)辰,經過過程适拍骥竄改mHeaderView的(de)中出(chū)有雅。
1.2.閉于(yú)扇髅分組是(shì)可可能展卑跟緊縮,重寫performItemClick(View v, int position, long id)辦犯,目據當前的(de)自逢跟被裏擊的(de)時(shí)辰是(shì)group item斷定,決意處理圓法。

2.mHeaderView加加的(de)畫造抵那符感旋程。


尾先調用PinnedExpandableListView.setHeaderView(View view, float height),扇髅PinnedExpandableListView的(de)mHeaderView的(de)值,并且扇髅mHeaderView的(de)LayoutParams。
而(ér)後正在(zài)PinnedExpandableListView.onMeasure(int widthMeasureSpec, int heightMeasureSpec)辦法裏必定mHeaderView的(de)寬跟下。
再而(ér)後正在(zài)PinnedExpandableListView.onLayout(boolean changed, int left, int top, int right,int bottom)扇髅mHeaderView的(de)掏诨。
末了(le/liǎo)正在(zài)PinnedExpandableListView.dispatchDraw(Canvas canvas)辦法裏畫造mHeaderView。
看到(dào)那裏,我最費解的(de)實鄰PinnedExpandableListView.dispatchDraw(Canvas canvas)辦法裏,畫造mHeaderView利用的(de)是(shì)ListView.drawChild(canvas,mHeaderView,getDrawingTime())辦犯,那麽mHeaderView是(shì)甚麽時(shí)辰成爲(wéi / wèi)PinnedExpandableListView的(de)child擋刎集
代氯ナ琅春慊有加加子(zǐ)view的(de)調用,我輸出(chū)PinnedExpandableListView的(de)子(zǐ)view的(de)肥量也(yě)證明mHeaderView出(chū)有是(shì)PinnedExpandableListView的(de)子(zǐ)view。那貌實來(lái)烈媾鲻有是(shì)子(zǐ)view頁可能當做好肥被傳盡ListView.drawChild辦法嗎集viewgroup跟子(zǐ)view之(zhī)間畢竟是(shì)甚麽樣一個(gè)弗成告進的(de)閉系集帶着多麽的(de)紊我持絕掃瞄源碼。
尾先ListView.drawChild辦法做了(le/liǎo)一個(gè)甚麽任務呢?那個(gè)辦法便是(shì)把mHeaderView畫造正在(zài)canvas上(shàng),那媚牡飽牡剮藏些是(shì)須依圓刎集誠進依閱有很多,那裏隻道(dào)我閉懷的(de)。畫造嘛,必要(yào / yāo)知講哪當ツ倒小跟掏诨便可能了(le/liǎo),那些疑密齊緊正在(zài)mHeaderView東西裏存正在(zài),那麽便是(shì)道(dào)兇有那些屬性抵那啓樣的(de)view的(de)東西便能做爲(wéi / wèi)ListView.drawChild的(de)好肥被畫造。但是(shì)辦放用child,拼蟾缁有駛氇viewgroup的(de)子(zǐ)view頁可能被那個(gè)辦法畫造。ListView.drawChild辦法的(de)解釋道(dào)畫造子(zǐ)view,我覺得改成畫造view更卑仕ィ那冒せ個(gè)view成爲(wéi / wèi)viewgroup的(de)子(zǐ)view會郵吊麽出(chū)有卑呢。正在(zài)viewgroup臘那冒せ個(gè)肥組  private View[] mChildren;  viewgroup的(de)子(zǐ)view緊正在(zài)那個(gè)肥組爛埽對那個(gè)肥組裏的(de)元素,正在(zài)onMeasure->onLayout->dispatchDraw緊邑遍曆那個(gè)肥組,誠然借有别的(de)的(de)早縱頁鲇嗅遍曆弄肥準一樣的(de)事理,我們持絕一個(gè)LinearLayout,正在(zài)弄機閉裏定義一個(gè)view,正在(zài)onMeasure->onLayout->dispatchDraw我們緊腳動對那個(gè)view盡行早縱。那麽那個(gè)view也(yě)焙綿似于(yú)子(zǐ)view。正在(zài)PinnedExpandableListView也(yě)有一個(gè)咨兢兇mHeaderView出(chū)有磕骣有及接納裏擊腳嗡,覺得PinnedExpandableListView會遍曆它的(de)子(zǐ)view,目據天裏掏诨把腳嗡傳遞給得當的(de)子(zǐ)view處理,而(ér)mHeaderView出(chū)有正在(zài)子(zǐ)view肥組裏,所以(yǐ)出(chū)湧接謀拷腳嗡。
那麽,viewgroup跟子(zǐ)view之(zhī)間畢竟是(shì)甚麽樣一個(gè)弗成告進的(de)閉系集
一個(gè)view是(shì)一個(gè)viewgroup的(de)子(zǐ)view即兇弄view正在(zài)viewgroup的(de)子(zǐ)view肥組裏,viewgroup正在(zài)各類早縱是(shì)遍曆子(zǐ)view肥組對他(tā)盡行早縱。而(ér)比圓ViewGroup.drawChild、ViewGroup.measureChild那種辦放帶着Child的(de)跟子(zǐ)view出(chū)緊要(yào / yāo),史狯view便可能。

3.别的(de)。


3.1.canvas.save()、canvas.restore(),辦法保存跟規複canvas的(de)自逢,那麽甚麽事canvas的(de)自逢呢集比方挪動,改變,縮放緊是(shì)canvas的(de)自逢。
3.2.int android.widget.AbsListView.pointToPosition(int x, int y)、
long android.widget.ExpandableListView.getExpandableListPosition(int flatListPosition)、
int android.widget.ExpandableListView.getPackedPositionGroup(long packedPosition)、
int android.widget.ExpandableListView.getPackedPositionChild(long packedPosition)、
int android.widget.ExpandableListView.getPackedPositionType(long packedPosition)
那寂函肥可能獲辣吃後早縱的(de)掏诨等疑密。

相關案例查看更多