日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

直接上干货!技术水平真的很重要!复习指南

發布時間:2023/11/30 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 直接上干货!技术水平真的很重要!复习指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開頭

25歲那年,我從京東離職,入職百度。

在百度認識了當時的架構師久哥(T9級別),因為他的一番話,徹底改變了我的職業生涯,短短三年的時間,我從一枚普通程序員成長為別人眼中的技術大咖。

當時因為業務需要,也承蒙久哥照顧,他跟我說過這樣一段話:

他問,“如果用5年的時間學習數據庫,你能不能成為這個領域的專家?”

我說,“應該可以吧”

他說,“你現在25,5年后也才30,30歲就能成為某個領域的專家,為什么不去做呢?你看看周圍有多少30歲的人還一事無成,而那個時候的你已經是數據庫專家了。”

當時的我,剛剛進入別人夢寐以求的BAT,處于各種浮躁的時期,雖然每天也在學習,看起來也很努力,但是效果極其有限,今天想學大數據,明天想學云計算,后天又要研究機器學習,心境變化無常,不知道自己未來究竟該是什么樣。

面試官:說說view中的事件分發?

android中事件分發機制是android中常見的問題,一般大家都知道view的分發事件是從view的Viewgroup(Parent)#dispatchTouchEvent到Viewgroup(Parent)#onInterceptTouchEvent再到View#dispatchTouchEvent,然后到view的onTouchEvent,最后又回到了Viewgroup(Parent)#onTouchEvent。如果大家記不住方法名,可以直接說先是parent的分發到攔截再到view的分發,再到view的消費,最后到parent的消費

viewgroup分發

這樣回答肯定是很淺顯的,因為沒有說出是否攔截、是否分發、是否消費的各種條件,沒有涉及到各種action的分發情況,上面說的默認分發只是針對action_down的,因為view/viewgroup各種super調用都是不進行分發、攔截、消費的,所以在沒找到處理touch事件的view時候,是一直往上層view傳遞的,一直傳到activity里面,下面我們再來整理一下:

如果viewgroup不進行分發,那么action_down、action_move和action_up只會執行到viewgroup的dispatchTouchEvent,不分發的條件是dispatchTouchEvent直接返回true或false,true和false的區別是true會執行action_down、action_move和action_up,而如果直接返回false只會執行到action_down。并且后續的viewgroup的onInterceptTouchEvent后續方法都不會被執行到。

關于為什么view/Viewgroup的dispatchTouchEvent返回true的時候三個action都能執行到,而返回false的話,只能執行到action_down,這個需要到view/Viewgroup的父類中dispatchTouchEvent找答案,該方法中會在action_down的時候調用dispatchTransformedTouchEvent方法,而該方法是通過子view的dispatchTouchEvent方法的返回值來決定父類的dispatchTransformedTouchEvent方法的返回值,而dispatchTransformedTouchEvent的返回值會決定mFirstTouchTarget是否為空,所以在action_down的過程中實際中通過子view的dispatchTouchEvent方法返回值來確定mFirstTouchTarget是否為空。這里貼出viewgroup中dispatchTransformedTouchEvent方法的刪減代碼:

private boolean dispatchTransformedTouchEvent(MotionEvent event, boolean cancel,View child, int desiredPointerIdBits) {------------------//省略了cancel部分的代碼------------------------//如果child為空,直接調用自己的dispatchTouchEvent方法,此時自己就相當于一個view,touch事件走自己的if (child == null) {handled = super.dispatchTouchEvent(transformedEvent);} else {final float offsetX = mScrollX - child.mLeft;final float offsetY = mScrollY - child.mTop;transformedEvent.offsetLocation(offsetX, offsetY);if (! child.hasIdentityMatrix()) {transformedEvent.transform(child.getInverseMatrix());}//返回值直接通過孩子來獲取返回值handled = child.dispatchTouchEvent(transformedEvent);}transformedEvent.recycle();return handled; }

所以如果view/viewgroup的dispatchTouchEvent方法返回false,表示在action_down的時候,父類的dispatchTransformedTouchEvent方法返回false;如果返回true會調用addTouchTarget方法,給mFirstTouchTarget設置值:

private TouchTarget addTouchTarget(@NonNull View child, int pointerIdBits) {final TouchTarget target = TouchTarget.obtain(child, pointerIdBits);target.next = mFirstTouchTarget;mFirstTouchTarget = target;return target; }

緊接著在在后面又會調用了:

這句只有在view/viewgroup的dispatchTouchEvent返回false的時候,才會走這里,所以后面的action_move和action_up都會走這里,而此時傳入的child=null,從上面代碼可以看到,直接調用了父類的dispatchTouchEvent方法。所以從這里不難看出在view/viewgroup的dispatchTouchEvent返回false的時候直接調用了父類的dispatchTouchEvent方法,因此只有action_down事件。

面試官:如果我只想有view的拖拽事件,而不想要view的點擊事件,讓你重寫這個view的拖拽怎么設計

其實這道題考察大家對view的dispatchTouchEvent和view的onTouchEvent事件的處理流程,上面已經分析了想要view能執行到view的touch事件,那么必須要求view的dispatchTouchEvent返回true,而dispatchTouchEvent返回true要么是dispatchTouchEvent直接返回true或者view的onTouchEvent返回true。如果從效率上看,直接將dispatchTouchEvent返回true就ok,而不需要再去關心onTouchEvent方法。

viewgroup攔截

關于攔截無非就是攔截或不攔截,而攔截的條件是返回true,不攔截是返回false或返回super.onInterceptTouchEvent,默認的super是返回false的,因此可以用super表示不攔截

viewgroup攔截實際是通過在dispatchTouchEvent方法中,設置intercepted變量,如果在攔截方法里面返回true,那么intercepted為true,如果為true則在action_down的時候mFirstTouchTarget=null,那么此時是直接調用dispatchTransformedTouchEvent傳入的child=null,因此將事件交給了super.dispatchTouchEvent,此時把它當成一個view來處理了。

面試官:有個viewgroup,里面有個view,如果view在dispatchTouchView中不分發事件,并且只在action_move中攔截touch事件向下分發,說說viewgroup到view的各個action是如何分發的?

新的開始

改變人生,沒有什么捷徑可言,這條路需要自己親自去走一走,只有深入思考,不斷反思總結,保持學習的熱情,一步一步構建自己完整的知識體系,才是最終的制勝之道,也是程序員應該承擔的使命。

如果有需要進階Android高級工程師系統學習資料的,我可以免費分享給大家,需要完整版的朋友,【點這里可以看到全部內容】。

《系列學習視頻》

《系列學習文檔》

《我的大廠面試之旅》

》**

[外鏈圖片轉存中…(img-t7ok84Nc-1621871216486)]

《我的大廠面試之旅》

[外鏈圖片轉存中…(img-c2wn0NDd-1621871216490)]

總結

以上是生活随笔為你收集整理的直接上干货!技术水平真的很重要!复习指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九热这里只有精品 | 亚洲精品一区二区在线观看 | 毛片网站视频 | 国产精品一色哟哟哟 | 中国美女乱淫免费看视频 | 亚洲狼人av| 日本在线高清 | 欧洲激情网 | 日本一区二区三区欧美 | 欧美一区二区三区视频 | 免费毛片在线播放免费 | 区一区二区三 | 少妇媚药按摩中文字幕 | 玖玖国产 | 国产激情91 | 岛国大片在线 | 91操操| 偷拍久久久| 91天天操| 亚洲视频在线观看 | 狠狠操天天射 | 色噜噜一区二区 | 四虎8848精品成人免费网站 | 美女免费黄色 | 色综合色综合网色综合 | 久久福利网站 | 国产区一二 | 又嫩又硬又黄又爽的视频 | 浪潮av网站 | 国产乱码精品一区二区三区精东 | 国产av一区二区三区传媒 | 成人免费三级 | 日本三级片在线观看 | h网站在线| 一级不卡毛片 | 亚洲综合免费观看高清完整版在线 | 伊人中文字幕在线观看 | 色综合视频在线观看 | 精品毛片一区二区三区 | 热热热热色 | 西西人体44www大胆无码 | 日韩乱码视频 | 丰满双乳秘书被老板狂揉捏 | 亚洲国产无线乱码在线观看 | 亚洲91精品 | 波多野吉衣毛片 | 美女靠逼app | 国产一国产二国产三 | 浴室里强摁做开腿呻吟男男 | 黄色大全在线观看 | 九九热视频精品在线观看 | 亚州av综合色区无码一区 | 九九视频网 | 少妇高潮网站 | 精品一区在线 | 校园春色综合 | 不卡一区二区三区四区 | 天天操操操 | 免费视频91蜜桃 | 我不卡一区二区 | 成人h视频在线 | 啪啪av导航| av动漫免费观看 | 精品欧美一区二区三区 | 日本黄色成人 | 在线观看的免费 | 九草网| 日韩经典三级 | 美美女高清毛片视频免费观看 | 久久综合一本 | 亚洲AV无码片久久精品 | 国产精品无码在线 | 假日游船 | 亚洲国产精品无码专区 | 亚洲精品久久久久久久蜜桃臀 | 天天操人人射 | 精品蜜桃av| 亚洲啪啪免费视频 | 91偷拍网站 | 污的视频在线观看 | 精品欧美一区二区三区免费观看 | 抖音视频在线观看 | 色屁屁 | xxxxx黄色片| 成人午夜激情网 | 成人中文在线 | 欧美巨乳在线观看 | 五月天啪啪 | 欧美日韩国产高清视频 | 成年视频在线 | 手机看片1024在线 | 亚洲第一综合色 | 黄色一级片免费 | 在线a级| 免费一级特黄 | 波多野吉衣毛片 | 亚洲美女高潮久久久 | 边吃奶边添下面好爽 | 国产精品无码久久久久成人app |