Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android事件分發機制完全解析,帶你從源碼的角度徹底理解(下)

Android事件分發機制完全解析,帶你從源碼的角度徹底理解(下)

編輯:Android開發教程

記得在前面的文章中,我帶大家一起從源碼的角度分析了Android中View的事件分發機制,相信閱讀過的 朋友對View的事件分發已經有比較深刻的理解了。

還未閱讀過的朋友,請先參考 Android事件分發機 制完全解析,帶你從源碼的角度徹底理解(上) 。

那麼今天我們將繼續上次未完成的話題,從源碼的 角度分析ViewGruop的事件分發。

首先我們來探討一下,什麼是ViewGroup?它和普通的View有什麼區 別?

顧名思義,ViewGroup就是一組View的集合,它包含很多的子View和子VewGroup,是Android中所 有布局的父類或間接父類,像LinearLayout、RelativeLayout等都是繼承自ViewGroup的。但ViewGroup實際 上也是一個View,只不過比起View,它多了可以包含子View和定義布局參數的功能。ViewGroup繼承結構示意 圖如下所示:

可以看到,我們平時項目裡經常用到 的各種布局,全都屬於ViewGroup的子類。

簡單介紹完了ViewGroup,我們現在通過一個Demo來演示一下Android中VewGroup的事件分發流程吧。

首先我們來自定義一個布局,命名為MyLayout,繼承自LinearLayout,如下所示:

public 

class MyLayout extends LinearLayout {  
      
    public MyLayout(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
      
}

然後,打開主布局文件activity_main.xml,在其中加入我們自定義的布局:

<com.example.viewgrouptouchevent.MyLayout 

xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/my_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >  
      
    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button1" />  
      
    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2" />  
      
</com.example.viewgrouptouchevent.MyLayout>

可以看到,我們在MyLayout中添加了兩個 按鈕,接著在MainActivity中為這兩個按鈕和MyLayout都注冊了監聽事件:

myLayout.setOnTouchListener(new OnTouchListener() {  
    @Override
    public boolean onTouch(View v, MotionEvent event) {  
        Log.d("TAG", "myLayout on touch");  
        return false;  
    }  
});  
button1.setOnClickListener(new OnClickListener() {  
    @Override
    public void onClick(View v) {  
        Log.d("TAG", "You clicked button1");  
    }  
});  
button2.setOnClickListener(new OnClickListener() {  
    @Override
    public void onClick(View v) {  
        Log.d("TAG", "You clicked button2");  
    }  
});

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved