1. 程式人生 > >Android面試-View相關

Android面試-View相關

【    view繪製、事件分發、listview快取>>>View繪製機制:{    view樹的繪製流程、measure、layout、draw===view樹的繪製流程:[    measure<是否重新計算檢視大小> --->layout<是否重新安置檢視位置>----->draw<是否需要重繪>   是一個遞迴過程---measure測量:樹的遞迴過程,自上而下有序進行遍歷--->引數1、ViewGroup.LayoutParams:設定寬高2、MeasureSpec:測量規格,包含兩種,一種是測量它的模式;第二種是在這種模式下測量的大小。--->重要方法1、measure:最終還是呼叫了onMeasure方法2、onMeasure:測量邏輯的方法,兩個引數,寬高的測量規格。抽象方法,需要自定義。3、setMeasuredDimension():將測量好的規格,完成整個測量過程---layout:樹的遞迴過程,自上而下有序進行遍歷。根據測量的尺寸來擺放子檢視的位置。1、layout:最終呼叫onLayout方法2、onLayout:抽象方法,需要自定義。分垂直方向和水平方向的佈局。---onDraw:---兩個容易混淆的方法<回撥>:1、invalidate():請求系統,如果檢視沒有發生變化就不會繪製。2、requestLayout():當佈局發生變化的時候<方向、尺寸>會呼叫,它就會去出發measure和layout方法,但是它不會呼叫draw方法。]}>>>事件分發
:{  事件傳遞、事件分發:    為什麼會有事件分發、三個重要的事件分發方法、事件分發流程===為什麼會有事件分發:[    Android中的view是以樹型結構擺放的,可能有多個view重疊在一起,點選重疊的view會同時響應。    安卓上面的view是樹型結構的,View可能會重疊在一起,當我們點選的地方有多個View都可以響應的時候,這個點選事件應該給誰呢?為了解決這一個問題,就有了事件分發機制。    PhoneWindow---DecorView----RootView-----ViewGroupA----View1    沒有View遮擋的部分會顯示主題的顏色,主題的顏色和標題欄是在DecorView中的。---Window:抽象類,它是所有檢視最頂層的容器,包括了背景的顯示、標題欄和事件的處理。---PhoneWindow:是Window的唯一實現類,是View的事件管理容器。---DecorView:是PhoneWindow的內部類,來進行訊息的傳遞。]===三個重要的事件分發方法:[    Activity和View是沒有第二個攔截的,Activity作為整個事件的原始分發者,如果Activity攔截了這個事件就會導致整個頁面沒法相應,View作為整個事件傳遞的末端,要麼消費事件,要麼就不處理進行回傳。1、dispatchTouchEvent:分發,決定了它的觸控事件是由自己處理還是分發給子View,讓子View遞迴呼叫自身dispatchTouchEvent方法來處理。在dispatchTouchEvent原始碼中會呼叫onInterceptTouchEvent來判斷是否要進行攔截。2、onInterceptTouchEvent:用來攔截事件,當父控制元件下發事件給子控制元件進行處理的時候,如果子控制元件需要對控制元件進行處理,就會在此方法中進行攔截,然後在子控制元件中onTouchEvent處理。3、onTouchEvent:觸控事件<手勢事件>,是View中的一個方法。]===事件分發流程:[    當螢幕被點選的時候:Activity --->PhoneWindow --->DecorView --->ViewGroup ---->....... ----->View。如果分發到最後一個View,也沒有處理事件,事件會依次返轉,最後迴轉到最高位的Activity,如果Activity還沒處理,事件才會被拋棄。這是責任鏈設計模式。既保證了事件的有序性,又非常靈活。]}>>>listview快取
:{    什麼是listview、listview介面卡模式、listview的recycleBin機制、listview的優化===什麼是listview:[    ListView就是一個能資料集合以動態滾動的方式展示到使用者介面上的View。]===listview介面卡模式:[    Adapter是ListView和資料之間的橋樑,為了保證資料和View的分離。]===listview的recycleBin機制:[--- private View[] mActiveViews = new View[0];  用於儲存活動的View,代表可見的View,這些View是可以直接被複用。---  private ArrayList<View>[] mScrapViews;   //所有廢棄的View,即劃出螢幕的View。--- private ArrayList<View> mCurrentScrap;   //當前被滑出去的View,被廢棄的View集合。---public void setViewTypeCount(int viewTypeCount) {    //為ListView中的每一個數據項建立一個recycleBin機制---  void fillActiveViews(int childCount, int firstActivePosition) {  //填充---View getActiveView(int position) {    //獲取相應螢幕上顯示的View--- void addScrapView(View scrap, int position) {   //快取廢棄的View    ListView中螢幕可見的才會儲存在記憶體中,移除屏幕後加入RecycleBin,再次進入螢幕的從RecycleBin獲取。]===ListView優化:[    public View getView( int position,View convertView,ViewGroup parent )   //convertView 快取1、contentView重用 / viewHolder:contentView快取的作用,複用控制元件;viewHolder避免多次findViewByid,減少查詢控制元件的次數,佈局二叉樹結構,每次遍歷都很耗時。2、三級快取 / 監聽滑動事件: 圖片載入的時候需要用到快取,儘量在getView中少做耗時操作,保證ListView滑動的流暢性。  如果一定要做耗時操作,可以設定監聽滑動事件,等滑動停止過後再去載入整個圖片。3、避免使用半透明元素,半透明繪製比不透明更耗時。4、開啟硬體加速。       @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder;            if (convertView == null) {                holder = new ViewHolder();                convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item, null);                holder.img = (ImageView) convertView.findViewById(R.id.img);                holder.title = (TextView) convertView.findViewById(R.id.title);                holder.info = (TextView) convertView.findViewById(R.id.info);                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();            }            holder.title.setText("Hello");            holder.info.setText("World");            return convertView;        }]}】

相關推薦

Android面試-View相關

【    view繪製、事件分發、listview快取>>>View繪製機制:{    view樹的繪製流程、measure、layout、draw===view樹的繪製流程:[    measure<是否重新計算檢視大小> --->lay

Android繪製View相關的幾個問題

前面關於View繪製的話題好像零散的寫過部落格,雖然好久沒有認真的研究一些東西了,平時忙其他的東西,但是本著每個月必須花幾天時間看看android的想法,今天整理了幾個View繪製相關的問題,這裡不會涉及View測量佈局繪製的那部分細節,因為這些前面已經寫過了。主要有以下幾個問題 1.View繪

Android面試 - Activity相關會問些什麼

本文包括以下內容(針對Android面試,部分細節略去): 1. Activity生命週期 2. Activity四種啟動模式及其應用場景 3. IntentFilter匹配規則 (Activity和Fragment、Service互動會在其他文章中寫到) 更多An

AndroidView面試相關

什麼是View? Android.app.View 就是手機的UI,View 負責繪製UI,處理事件(evnet),Android 利用 View 打造出所 Widgets,利用 Widget 可打造出互動式的使用者介面,每個View 負責一定區域的繪製。 View 座標

Android面試收集錄12 View測量、布局及繪制原理

模糊 view繪制 params 可能 ec2 androi 流程 https images 一、View繪制的流程框架 View的繪制是從上往下一層層叠代下來的。DecorView-->ViewGroup(--->ViewGroup)-->V

Android面試系列之非同步訊息處理相關

我們在平時的專案開發中,肯定會遇到處理非同步任務的場景。因為Android中的UI執行緒是不安全的,我們需要更新ui的話就必須在ui執行緒上進行操作。否則就會拋異常。 這個時候我們就需要用到非同步訊息處理了 比如,在子執行緒中請求資料,拿到資料後告訴ui執行

Android面試解密-自定義View

一、為什麼要自定義控制元件:1.特定的顯示分格2.處理特有的使用者互動3.優化我們的佈局4.封裝等二、如何自定義View1.自定義屬性的宣告與獲取2.測量onMeasure3.佈局onLayout(ViewGroup)4.繪製onDraw5.onTouchEvent6.onI

Android知識架構 · 電話面試 · View的繪製流程

View的繪製流程:OnMeasure()——>OnLayout()——>OnDraw() 各步驟的主要工作: OnMeasure():測量檢視大小。從頂層父View到子View遞迴呼叫measure方法,measure方法又回撥OnMeasu

Android面試知識點系列】Looper相關

Looper是一個面試中經常被用來問的知識點,我這裡也只是總結一下通過看Looper原始碼可能在面試中問到的知識點,還是推薦大家多看原始碼。 Looper在Handler機制中,就像是一個傳送帶的電動機,它驅動著傳送帶(MessageQueue)不斷

Android面試知識點系列】MessaeQueue相關

MessageQueue也是面試中與Handler、Looper是Handler問題套餐系列之一。那麼究竟它又有什麼潛在的知識點呢?讓我們一起從原始碼出發。 MessageQueue通過什麼方法將Message物件新增進來?在什麼時候執行該操作?

android-進階(3)-自定義view(2)-AndroidView繪製流程以及相關方法的分析

最近正在學自定義view,這篇文章主要講view的繪製流程和一些相關的方法,淺顯易懂,寫的非常好,忍不住就轉載了。             前言: 本文是我讀《Android核心剖析》第13章----View工作原理總結而成的,在此膜拜下作者 。

AndroidView繪製流程以及invalidate()等相關方法分析

            前言: 本文是我讀《Android核心剖析》第13章----View工作原理總結而成的,在此膜拜下作者 。同時真摯地向渴望瞭解Android 框架層的網友,推薦這本書,希望你們能夠在Android開發裡學到更多的知識 。             整個V

Android面試知識點系列】Handler相關

和其他面試點一樣,我將 通過自己學習原始碼,來總結可能出現的問題點。再次鼓勵的大家通過原始碼學習Android或者其他語言的知識,原始碼之下,毫無隱瞞。 Handler作為Android中重要的一個類,在面試中經常被問到,也是Android跨執行緒通

Android面試自定義View

 通過學習慕課網的自定義view視訊總結如下:           一、為什麼要自定義控制元件:  1、特定的顯示風格 (App的特定效果) 2、處理特有的使用者互動(textview 不能滑動) 3

Android重寫view時onAttachedToWindow () 和 onDetachedFromWindow ()

intent action efault tor null lock 相對 ext.get pre 在重寫View的時候,會遇到這兩個方法 protected void onAttachedToWindow() Description copied from

androidView

height 發生 sta per direct anti change screen cto 在進行遊戲開發時,需要自定義各種控件和界面。 自定義View的使用: 繪制屏幕 刷新屏幕:後臺數據發生了變化,需要開發人員自己刷新屏幕以顯示最新數據 例子: MyView開發

androidView, Window, Activity, WindowManager,ViewRoot幾者之間的關系

line 消息傳遞 post att 顯示 增加 調用 eas window對象 (1)View:最主要的UI組件,表示屏幕上的一個矩形區域。 (2)Window: 表示一個窗體,不一定有屏幕那麽大,能夠非常大也能夠非常小;

Android界面相關的類

androi rip function down var inflate cal 交互 區域 Android界面相關的類 Window Activity的顯示界面對象,並作為頂層View被加入到WindowManager中。Window提供了標準

window、view相關

set tex 文件 交互 val 區域 調用 ger XML View、Window以及Activity主要是用於顯示並與用戶交互window view activity surfaceView 三者間的關系: 在Activity中要設置View時,通常用的方法是:set

Android面試準備 第二天 第五例 數據存儲

基礎上 運行時 find create 架設 線下 一個 都是 混亂 參考:http://blog.csdn.net/lmj623565791/article/details/24015867 5、Activity用SharedPreferences保存數據,大小