欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:【Android的事件觸發(fā)】

柚子快報(bào)激活碼778899分享:【Android的事件觸發(fā)】

http://yzkb.51969.com/

Android學(xué)習(xí)路線(第二部分)

基于監(jiān)聽的事件處理機(jī)制

基于回調(diào)事件的處理機(jī)制

view的事件觸發(fā)

Android 存儲(chǔ)概念

File 內(nèi)部存儲(chǔ)

一、基于監(jiān)聽的事件處理機(jī)制

監(jiān)聽三要素:事件源、事件、事件監(jiān)聽器

實(shí)現(xiàn)監(jiān)聽事件的方法:

通過內(nèi)部類實(shí)現(xiàn) class OnClick implements View.OnlickListener{

}

通過匿名內(nèi)部類實(shí)現(xiàn) @Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_button);

mBtn3 = (Button) findViewById(R.id.btn_3);

mBtn3.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(ButtonActivity.this,"btn3被點(diǎn)擊了",Toast.LENGTH_SHORT).show();

}

});

通過事件源所在類實(shí)現(xiàn) // 3.通過事件源所在的內(nèi)部類實(shí)現(xiàn) 當(dāng)前Activity實(shí)現(xiàn)implements View.OnClickListener

mBtnEvent.setOnClickListener(EventActivity.this);

@Override

public void onClick(View v) {

Log.d("事件源所在的內(nèi)部類", "click");

ToastUtil.showMessage(EventActivity.this, "事件源所在的內(nèi)部類實(shí)現(xiàn)");;

}

通過外部類實(shí)現(xiàn) 布局文件中onClick屬性(針對(duì)點(diǎn)擊事件)(這種方法設(shè)置的監(jiān)聽器比較優(yōu)先,如果同一個(gè)按鈕有好幾個(gè)監(jiān)聽事件,那么只會(huì)執(zhí)行后設(shè)置的監(jiān)聽器)

二、基于回調(diào)事件的處理機(jī)制

回調(diào)事件的實(shí)現(xiàn):我們?cè)谧约旱目丶欣^承button類,然后重寫了一個(gè)ontouchevent方法,當(dāng)我們點(diǎn)下去按鈕的時(shí)候,執(zhí)行回調(diào)這個(gè)方法。

回調(diào)事件處理的傳播,系統(tǒng)執(zhí)行回調(diào)操作時(shí)先從監(jiān)聽事件檢查是否

到控件本身(比如一個(gè)自己的button)

再到Activity逐層向外傳播。假如在某一層的return true了,那么回調(diào)事件停止傳播。

mBtnMy = findViewById(R.id.btn_my);

// 先執(zhí)行監(jiān)聽器里的方法 在執(zhí)行回調(diào)

mBtnMy.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

//getAction值的是“按下”這個(gè)事件

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

Log.d("Listener", "OnTouchListener");

break;

}

return false;

}

});

// 后執(zhí)行Activity里的方法 在執(zhí)行回調(diào)

@Override

public boolean onTouchEvent(MotionEvent event) {

super.onTouchEvent(event);

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

Log.d("EventActivity", "onTouchEvent");

break;

}

return false;

}

三、View 事件分發(fā)流程

1. dispatchTouchEvent方法(入口方法)

1.1、事件分發(fā)的核心方法,事件分發(fā)的邏輯都是在這個(gè)方法中實(shí)現(xiàn); 1.2、View、以及 ViewGroup、其他的實(shí)現(xiàn)類都重寫了該方法; 1.3、如果成功處理則返回true,處理失敗則返回false,表示事件沒有被處理。 1.4、在view的相關(guān)類中,該方法的主要作用是消費(fèi)觸摸事件。 1.5、在viewGroup相關(guān)類中,該方法的主要作用是把事件分發(fā)到該viewGroup所擁有的子view,如果子view沒有處理則自己處理;

1.6、點(diǎn)擊事件時(shí),觸發(fā)了兩次 dispatchTouchEvent方法,一次action_down和一次action_up

2. onTouchEvent

方法返回true表示消費(fèi)事件,返回false表示不消費(fèi)事件;viewGroup分發(fā)事件時(shí),如果沒有一個(gè)子view消費(fèi)事件,那么會(huì)調(diào)用viewGroup自身的onTouchEvent方法來處理事件。View的dispatchTouchEvent方法(入口方法)中,先調(diào)用onTouchListener判斷是否消費(fèi);如果onTouchListener沒有消費(fèi)事件,才會(huì)調(diào)用onTouchEvent來處理事件;

3. onTouch 和onTouchEvent 的區(qū)別

onTouchListener的onTouch方法優(yōu)先級(jí)比onTouchEvent高,會(huì)先觸發(fā)。假如onTouch方法返回false,會(huì)接著觸發(fā)onTouchEvent,反之onTouchEvent方法不會(huì)被調(diào)用。內(nèi)置諸如click事件的實(shí)現(xiàn)等等都基于onTouchEvent,假如onTouch返回true,這些事件將不會(huì)被觸發(fā)。

四、Handler消息處理

功能一:延時(shí)處理,postDelayed

private Handler mHandler;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_handler);

mHandler = new Handler();

mHandler.postDelayed(new Runnable() {

@Override

public void run() {

Intent intent = new Intent(HandlerActivity.this, ButtonActivity.class);

startActivity(intent);

}

}, 3000);

功能二:線程間通信,handleMessage,Thread

private Handler mHandler;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_handler);

//重寫handleMessage方法接收線程的消息并做一些處理

mHandler = new Handler(Looper.getMainLooper()) {

@Override

public void handleMessage(@NonNull Message msg) {

super.handleMessage(msg);

switch (msg.what) {

case 1:

ToastUtil.showMessage(HandlerActivity.this, "線程通信成功");;

break;

}

}

};

//新建一個(gè)新的線程thread,發(fā)送消息

new Thread() {

@Override

public void run() {

super.run();

Message message = new Message();

message.what = 1;

mHandler.sendMessage(message);

}

}.start();

}

柚子快報(bào)激活碼778899分享:【Android的事件觸發(fā)】

http://yzkb.51969.com/

精彩文章

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19093299.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄