真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

關(guān)于AndoridView的種種,這里告訴你答案-創(chuàng)新互聯(lián)

在開(kāi)始之前先加入一點(diǎn)關(guān)于混合開(kāi)發(fā)面試題

大廠除了技術(shù)深度之外,還要求你具備一些廣度的知識(shí),比如你要會(huì)前端知識(shí),會(huì)混合開(kāi)發(fā),至少會(huì)一種腳本語(yǔ)言,C c++更不用說(shuō)了,也是必會(huì)的。

目前成都創(chuàng)新互聯(lián)公司已為超過(guò)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、左云網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

為此我吧這些知識(shí)整理成了一個(gè)983的PDF,從基礎(chǔ)到進(jìn)階含有BATJ.字節(jié)跳動(dòng)面試專題,算法專題,高端技術(shù)專題,混合開(kāi)發(fā)專題,java面試專題,Android,Java小知識(shí),到性能優(yōu)化.線程.View.OpenCV.NDK等應(yīng)有盡有。還有輔之相關(guān)的視頻+學(xué)習(xí)筆記
關(guān)于Andorid View的種種,這里告訴你答案
(更多完整項(xiàng)目下載。未完待續(xù)。源碼。圖文知識(shí)后續(xù)上傳github。)
可以點(diǎn)擊關(guān)于我聯(lián)系我獲取完整PDF
(VX:×××)

1.Hybrid做過(guò)嗎?
2.Hybrid通信原理是什么,有做研究嗎?
3.react native有多少了解?講一下原理。
4.weex了解嗎?如何自己實(shí)現(xiàn)類似技術(shù)?
5.flutter了解嗎??jī)?nèi)部是如何實(shí)現(xiàn)跨平臺(tái)的?
6.Dart語(yǔ)言有研究貴嗎?
7.快應(yīng)用了解嗎?跟其她方式相比有什么優(yōu)缺點(diǎn)?
8.說(shuō)說(shuō)你用過(guò)的混合開(kāi)發(fā)技術(shù)有哪些?各有什么優(yōu)缺點(diǎn)?
9.Python會(huì)嗎?
10.會(huì)不會(huì)PHP?
11.Gradle了解多少?groovy語(yǔ)法會(huì)嗎?

Android View總結(jié)

1.View的滑動(dòng)方式

a)layout(left,top,right,bottom):通過(guò)修改View四個(gè)方向的屬性值來(lái)修改View的坐標(biāo),從而滑動(dòng)View

b)offsetLeftAndRight() offsetTopAndBottom():指定偏移量滑動(dòng)view

c )LayoutParams,改變布局參數(shù):layoutParams中保存了view的布局參數(shù),可以通過(guò)修改布局參數(shù)的方式滑動(dòng)view

d )通過(guò)動(dòng)畫(huà)來(lái)移動(dòng)view:注意安卓的平移動(dòng)畫(huà)不能改變view的位置參數(shù),屬性動(dòng)畫(huà)可以

e )scrollTo/scrollBy:注意移動(dòng)的是view的內(nèi)容,scrollBy(50,50)你會(huì)看到屏幕上的內(nèi)容向屏幕的左上角移動(dòng)了,這是參考對(duì)象不同導(dǎo)致的,你可以看作是它移動(dòng)的是手機(jī)屏幕,手機(jī)屏幕向右下角移動(dòng),那么屏幕上的內(nèi)容就像左上角移動(dòng)了
f )scroller:scroller需要配置computeScroll方法實(shí)現(xiàn)view的滑動(dòng),scroller本身并不會(huì)滑動(dòng)view,它的作用可以看作一個(gè)插值器,它會(huì)計(jì)算當(dāng)前時(shí)間點(diǎn)view應(yīng)該滑動(dòng)到的距離,然后view不斷的重繪,不斷的調(diào)用computeScroll方法,這個(gè)方法是個(gè)空方法,所以我們重寫(xiě)這個(gè)方法,在這個(gè)方法中不斷的從scroller中獲取當(dāng)前view的位置,調(diào)用scrollTo方法實(shí)現(xiàn)滑動(dòng)的效果

2.View的事件分發(fā)機(jī)制

點(diǎn)擊事件產(chǎn)生后,首先傳遞給Activity的dispatchTouchEvent方法,通過(guò)PhoneWindow傳遞給DecorView,然后再傳遞給根ViewGroup,進(jìn)入ViewGroupdispatchTouchEvent方法,執(zhí)行onInterceptTouchEvent方法判斷是否攔截,再不攔截的情況下,此時(shí)會(huì)遍歷ViewGroup的子元素,進(jìn)入子View的dispatchToucnEvent方法,如果子view設(shè)置了onTouchListener,就執(zhí)行onTouch方法,并根據(jù)onTouch的返回值為true還是false來(lái)決定是否執(zhí)行onTouchEvent方法,如果是false則繼續(xù)執(zhí)行onTouchEvent,在onTouchEvent的Action Up事件中判斷,如果設(shè)置了onClickListener,就執(zhí)行onClick方法。

3.View的加載流程

View隨著Activity的創(chuàng)建而加載,startActivity啟動(dòng)一個(gè)Activity時(shí),在ActivityThreadhandleLaunchActivity方法中會(huì)執(zhí)行Activity的onCreate方法,這個(gè)時(shí)候會(huì)調(diào)用setContentView加載布局創(chuàng)建出DecorView并將我們的layout加載到DecorView中,當(dāng)執(zhí)行到handleResumeActivity時(shí),Activity的onResume方法被調(diào)用,然后WindowManager會(huì)將DecorView設(shè)置給ViewRootImpl,這樣,DecorView就被加載到Window中了,此時(shí)界面還沒(méi)有顯示出來(lái),還需要經(jīng)過(guò)View的measure,layout和draw方法,才能完成View的工作流程。我們需要知道View的繪制是由ViewRoot來(lái)負(fù)責(zé)的,每一個(gè)DecorView都有一個(gè)與之關(guān)聯(lián)的ViewRoot,這種關(guān)聯(lián)關(guān)系是由WindowManager維護(hù)的,將DecorViewViewRoot關(guān)聯(lián)之后,ViewRootImplrequestLayout會(huì)被調(diào)用以完成初步布局,通過(guò)scheduleTraversals方法向主線程發(fā)送消息請(qǐng)求遍歷,最終調(diào)用ViewRootImplperformTraversals方法,這個(gè)方法會(huì)執(zhí)行View的measure layout 和draw流程

4.View的measure layout 和 draw流程

在上邊的分析中我們知道,View繪制流程的入口在ViewRootImplperformTraversals方法,在方法中首先調(diào)用performMeasure方法,傳入一個(gè)childWidthMeasureSpecchildHeightMeasureSpec參數(shù),這兩個(gè)參數(shù)代表的是DecorViewMeasureSpec值,這個(gè)MeasureSpec值由窗口的尺寸和DecorView的LayoutParams決定,最終調(diào)用View的measure方法進(jìn)入測(cè)量流程

measure:

View的measure過(guò)程由ViewGroup傳遞而來(lái),在調(diào)用View.measure方法之前,會(huì)首先根據(jù)View自身的LayoutParams和父布局的MeasureSpec確定子view的MeasureSpec,然后將view寬高對(duì)應(yīng)的measureSpec傳遞到measure方法中,那么子view的MeasureSpec獲取規(guī)則是怎樣的?分幾種情況進(jìn)行說(shuō)明

1.父布局是EXACTLY模式:

  • 子view寬或高是個(gè)確定值,那么子view的size就是這個(gè)確定值,mode是EXACTLY(是不是說(shuō)子view寬高可以超過(guò)父view?見(jiàn)下一個(gè))
  • 子view寬或高設(shè)置為match_parent,那么子view的size就是占滿父容器剩余空間,模式就是EXACTLY
    • 子view寬或高設(shè)置為wrap_content,那么子view的size就是占滿父容器剩余空間,不能超過(guò)父容器大小,模式就是AT_MOST

2.父布局是AT_MOST模式:

  • 子view寬或高是個(gè)確定值,那么子view的size就是這個(gè)確定值,mode是EXACTLY
    • 子view寬或高設(shè)置為match_parent,那么子view的size就是占滿父容器剩余空間,不能超過(guò)父容器大小,模式就是AT_MOST
  • 子view寬或高設(shè)置為wrap_content,那么子view的size就是占滿父容器剩余空間,不能超過(guò)父容器大小,模式就是AT_MOST

3.父布局是UNSPECIFIED模式:

  • 子view寬或高是個(gè)確定值,那么子view的size就是這個(gè)確定值,mode是EXACTLY
  • 子view寬或高設(shè)置為match_parent,那么子view的size就是0,模式就是UNSPECIFIED
  • 子view寬或高設(shè)置為wrap_content,那么子view的size就是0,模式就是UNSPECIFIED

獲取到寬高的MeasureSpec后,傳入view的measure方法中來(lái)確定view的寬高,這個(gè)時(shí)候還要分情況

1. 當(dāng)MeasureSpec的mode是UNSPECIFIED,此時(shí)view的寬或者高要看view有沒(méi)有設(shè)置背景,如果沒(méi)有設(shè)置背景,就返回設(shè)置的minWidthminHeight,這兩個(gè)值如果沒(méi)有設(shè)置默認(rèn)就是0,如果view設(shè)置了背景,就取minWidthminHeight和背景這個(gè)drawable固有寬或者高中的大值返回
2. 當(dāng)MeasureSpec的mode是AT_MOST和EXACTLY,此時(shí)view的寬高都返回從MeasureSpec中獲取到的size值,這個(gè)值的確定見(jiàn)上邊的分析。因此如果要通過(guò)繼承view實(shí)現(xiàn)自定義view,一定要重寫(xiě)onMeasure方法對(duì)wrap_conten屬性做處理,否則,他的match_parent和wrap_content屬性效果就是一樣的

layout:

layout方法的作用是用來(lái)確定view本身的位置,onLayout方法用來(lái)確定所有子元素的位置,當(dāng)ViewGroup的位置確定之后,它在onLayout中會(huì)遍歷所有的子元素并調(diào)用其layout方法,在子元素的layout方法中onLayout方法又會(huì)被調(diào)用。layout方法的流程是,首先通過(guò)setFrame方法確定view四個(gè)頂點(diǎn)的位置,然后view在父容器中的位置也就確定了,接著會(huì)調(diào)用onLayout方法,確定子元素的位置,onLayout是個(gè)空方法,需要繼承者去實(shí)現(xiàn)。

getMeasuredHeightgetHeight方法有什么區(qū)別?getMeasuredHeight(測(cè)量高度)形成于view的measure過(guò)程,getHeight(最終高度)形成于layout過(guò)程,在有些情況下,view需要measure多次才能確定測(cè)量寬高,在前幾次的測(cè)量過(guò)程中,得出的測(cè)量寬高有可能和最終寬高不一致,但是最終來(lái)說(shuō),還是會(huì)相同,有一種情況會(huì)導(dǎo)致兩者值不一樣,如下,此代碼會(huì)導(dǎo)致view的最終寬高比測(cè)量寬高大

100px
public void layout(int l,int t,int r, int b){
    super.layout(l,t,r+100,b+100);}
draw:

View的繪制過(guò)程遵循如下幾步:

a.繪制背景 background.draw(canvas)
b.繪制自己(onDraw)
c.繪制children(dispatchDraw)
d.繪制裝飾(onDrawScrollBars)

View繪制過(guò)程的傳遞是通過(guò)dispatchDraw來(lái)實(shí)現(xiàn)的,它會(huì)遍歷所有的子元素的draw方法,如此draw事件就一層一層的傳遞下去了

ps: view有一個(gè)特殊的方法setWillNotDraw,如果一個(gè)view不需要繪制內(nèi)容,即不需要重寫(xiě)onDraw方法繪制,可以開(kāi)啟這個(gè)標(biāo)記,系統(tǒng)會(huì)進(jìn)行相應(yīng)的優(yōu)化。默認(rèn)情況下,View沒(méi)有開(kāi)啟這個(gè)標(biāo)記,默認(rèn)認(rèn)為需要實(shí)現(xiàn)onDraw方法繪制,當(dāng)我們繼承ViewGroup實(shí)現(xiàn)自定義控件,并且明確知道不需要具備繪制功能時(shí),可以開(kāi)啟這個(gè)標(biāo)記,如果我們重寫(xiě)了onDraw,那么要顯示的關(guān)閉這個(gè)標(biāo)記

子view寬高可以超過(guò)父view?

  • android:clipChildren = "false" 這個(gè)屬性要設(shè)置在父 view 上。代表其中的子View 可以超出屏幕。
  • 子view 要有具體的大小,一定要比父view 大 才能超出。比如 父view 高度 100px 子view 設(shè)置高度150px。子view 比父view大,這樣超出的屬性才有意義。(高度可以在代碼中動(dòng)態(tài)賦值,但不能用wrap_content / match_partent)。
  • 對(duì)父布局還有要求,要求使用linearLayout(反正我用RelativeLayout 是不行)。你如果必須用其他布局可以在需要超出的view上面套一個(gè)linearLayout 外面再套其他的布局。
  • 最外面的布局如果設(shè)置的padding 不能超出
5.自定義view需要注意的幾點(diǎn)

1) 讓view支持wrap_content屬性,在onMeasure方法中針對(duì)AT_MOST模式做專門處理,否則wrap_content會(huì)和match_parent效果一樣(繼承ViewGroup也同樣要在onMeasure中做這個(gè)判斷處理)

if(widthMeasureSpec == MeasureSpec.AT_MOST && heightMeasureSpec == MeasureSpec.AT_MOST){
    setMeasuredDimension(200,200); // wrap_content

這種情況下要設(shè)置一個(gè)默認(rèn)值,200只是舉個(gè)例子,最終的值需要計(jì)算得到剛好包裹內(nèi)容的寬高值

}else if(widthMeasureSpec == MeasureSpec.AT_MOST){
    setMeasuredDimension(200,heightMeasureSpec );
}else if(heightMeasureSpec == MeasureSpec.AT_MOST){
    setMeasuredDimension(heightMeasureSpec ,200);
}

2) 讓view支持padding(onDraw的時(shí)候,寬高減去padding值,margin由父布局控制,不需要view考慮),自定義ViewGroup需要考慮自身的padding和子view的margin造成的影響
3) 在view中盡量不要使用handler,使用view本身的post方法
4) 在onDetachedFromWindow中及時(shí)停止線程或動(dòng)畫(huà)
5) view帶有滑動(dòng)嵌套情形時(shí),處理好滑動(dòng)沖突

ACTION_DOWN沒(méi)有攔截,ACTION_MOVE ACTION_UP還會(huì)攔截嗎

(更多完整項(xiàng)目下載。未完待續(xù)。源碼。圖文知識(shí)后續(xù)上傳github。)
可以點(diǎn)擊關(guān)于我聯(lián)系我獲取完整PDF
(VX:×××)

關(guān)于Andorid View的種種,這里告訴你答案

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


網(wǎng)站標(biāo)題:關(guān)于AndoridView的種種,這里告訴你答案-創(chuàng)新互聯(lián)
路徑分享:http://weahome.cn/article/ddchpj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部