界面左邊界的值為0。
[0025]所述滑動(dòng)的控制邏輯為:要實(shí)現(xiàn)滑動(dòng)功能,需要對(duì)觸摸事件進(jìn)行處理,重寫onTouchEvent (event)方法:當(dāng)發(fā)生ACT10N_D0WN按下事件時(shí),記錄按下位置;當(dāng)發(fā)生ACT10N_M0VE移動(dòng)事件時(shí),根據(jù)手指按在開(kāi)關(guān)滑塊上的移動(dòng)距離實(shí)時(shí)刷新界面;當(dāng)發(fā)生ACT10NJJP抬起事件時(shí),根據(jù)此時(shí)開(kāi)關(guān)滑塊的移動(dòng)距離判斷開(kāi)關(guān)狀態(tài),并刷新界面;
[0026]步驟3、接收手指對(duì)開(kāi)關(guān)視圖的滑動(dòng)或點(diǎn)擊事件,完成開(kāi)關(guān)的滑動(dòng)或點(diǎn)擊處理。
[0027]其中,所述根據(jù)手指按在開(kāi)關(guān)滑塊上的移動(dòng)距離實(shí)時(shí)刷新界面,具體為:根據(jù)手指按在開(kāi)關(guān)滑塊上的移動(dòng)距離來(lái)改變開(kāi)關(guān)滑塊距離界面左邊界的值,當(dāng)這個(gè)值等于最大值時(shí)就不再變大,本實(shí)施例中是開(kāi)的狀態(tài),所述最大值為開(kāi)關(guān)視圖的長(zhǎng)度減去開(kāi)關(guān)滑塊的長(zhǎng)度,開(kāi)關(guān)滑塊的移動(dòng)距離變化時(shí),界面也隨之刷新。
[0028]所述根據(jù)此時(shí)開(kāi)關(guān)滑動(dòng)的距離判斷開(kāi)關(guān)狀態(tài),具體為:根據(jù)此時(shí)開(kāi)關(guān)滑動(dòng)的距離是否超過(guò)所述最大值的一半判斷開(kāi)關(guān)狀態(tài),若超過(guò)最大值,開(kāi)關(guān)狀態(tài)為開(kāi),否則,開(kāi)關(guān)狀態(tài)為關(guān),并刷新界面。
[0029]另外,如圖3所示,本發(fā)明在復(fù)雜環(huán)境的外部控件對(duì)外部觸摸事件處理的情況下,開(kāi)關(guān)的觸摸事件將與所述外部觸摸事件的處理產(chǎn)生沖突,而開(kāi)關(guān)的觸摸事件無(wú)法得到執(zhí)行時(shí),要重寫dispatchTouchEvent (Mot1nEvent event)方法,在這個(gè)方法內(nèi)部調(diào)用requestDisallowInterceptTouchEvent (true)方法,請(qǐng)求外部控件的父控件不要攔截開(kāi)關(guān)的觸摸事件,讓開(kāi)關(guān)類SuperButton自己處理發(fā)生的開(kāi)關(guān)的觸摸事件;所述開(kāi)關(guān)的觸摸事件包括:按下事件、移動(dòng)事件或抬起事件。
[0030]總之,本發(fā)明不僅能完美的實(shí)現(xiàn)滑動(dòng)和點(diǎn)擊改變開(kāi)關(guān)狀態(tài)的功能,同時(shí)在開(kāi)關(guān)處于復(fù)雜環(huán)境中,依然能夠完美的實(shí)現(xiàn)相關(guān)功能,而不會(huì)出現(xiàn)卡頓現(xiàn)象。通過(guò)對(duì)onClick(view)和onTouchEvent (event)的重寫,實(shí)現(xiàn)了點(diǎn)擊和滑動(dòng)的控制。通過(guò)對(duì)復(fù)雜環(huán)境的分析,加入對(duì)Touch事件沖突的處理,通過(guò)requestDisallowInterceptTouchEvent (true)方法使自定義開(kāi)關(guān)SuperButton獨(dú)立處理與之相關(guān)的Touch事件來(lái)實(shí)現(xiàn)想要的功能。
[0031]以上所述僅為本發(fā)明的較佳實(shí)施例,凡依本發(fā)明申請(qǐng)專利范圍所做的均等變化與修飾,皆應(yīng)屬本發(fā)明的涵蓋范圍。
【主權(quán)項(xiàng)】
1.一種基于復(fù)雜環(huán)境下實(shí)現(xiàn)開(kāi)關(guān)可滑動(dòng)可點(diǎn)擊的方法,其特征在于:所述方法包括如下步驟: 步驟1、在復(fù)雜環(huán)境下創(chuàng)建一開(kāi)關(guān)類SuperButton,獲得該開(kāi)關(guān)類SuperButton的背景圖片所占的大小作為一開(kāi)關(guān)視圖的大小,并將該開(kāi)關(guān)視圖繪制到屏幕上; 步驟2、開(kāi)關(guān)視圖顯示后,對(duì)開(kāi)關(guān)視圖加入點(diǎn)擊和滑動(dòng)的控制邏輯; 所述點(diǎn)擊的控制邏輯為:通過(guò)重寫onClick(view)方法控制點(diǎn)擊事件,設(shè)定一個(gè)表示開(kāi)關(guān)狀態(tài)的變量,根據(jù)該變量的值來(lái)改變滑動(dòng)開(kāi)關(guān)的位置,并刷新屏幕的界面; 所述滑動(dòng)的控制邏輯為:對(duì)觸摸事件進(jìn)行處理,重寫onTouchEvent (event)方法:當(dāng)發(fā)生按下事件時(shí),記錄按下位置;當(dāng)發(fā)生移動(dòng)事件時(shí),根據(jù)手指按在開(kāi)關(guān)滑塊上的移動(dòng)距離實(shí)時(shí)刷新界面;當(dāng)發(fā)生抬起事件時(shí),根據(jù)此時(shí)開(kāi)關(guān)滑塊的移動(dòng)距離判斷開(kāi)關(guān)狀態(tài),并刷新界面; 步驟3、接收手指對(duì)開(kāi)關(guān)視圖的滑動(dòng)或點(diǎn)擊事件,完成開(kāi)關(guān)的滑動(dòng)或點(diǎn)擊處理。2.根據(jù)權(quán)利要求1所述的一種基于復(fù)雜環(huán)境下實(shí)現(xiàn)開(kāi)關(guān)可滑動(dòng)可點(diǎn)擊的方法,其特征在于:所述步驟I具體為:創(chuàng)建一開(kāi)關(guān)類SuperButton,所述開(kāi)關(guān)類SuperButton繼承開(kāi)關(guān)控件的父類View,通過(guò)構(gòu)造方法創(chuàng)建開(kāi)關(guān)對(duì)象,調(diào)用onMeasure (int, int)方法測(cè)量開(kāi)關(guān)對(duì)象的背景圖片所占的大小作為開(kāi)關(guān)視圖的大小,并調(diào)用OnDraw(Canvas)方法將該開(kāi)關(guān)視圖繪制到屏幕上。3.根據(jù)權(quán)利要求1所述的一種基于復(fù)雜環(huán)境下實(shí)現(xiàn)開(kāi)關(guān)可滑動(dòng)可點(diǎn)擊的方法,其特征在于:所述步驟2中根據(jù)該變量的值來(lái)改變滑動(dòng)開(kāi)關(guān)的位置,具體為:所述變量為布爾類型,變量初始值設(shè)置為true,表不開(kāi)的狀態(tài),當(dāng)發(fā)生點(diǎn)擊事件后,將變量的值改為false,再點(diǎn)擊時(shí),將變量的值改為true,以此類推;改變變量的值后,要同時(shí)修改開(kāi)關(guān)滑塊距離界面左邊界的值;其中,開(kāi)關(guān)開(kāi)的時(shí)候開(kāi)關(guān)滑塊距離界面左邊界的值為開(kāi)關(guān)視圖的長(zhǎng)度減去開(kāi)關(guān)滑塊的長(zhǎng)度,開(kāi)關(guān)關(guān)的時(shí)候開(kāi)關(guān)滑塊距離界面左邊界的值為O。4.根據(jù)權(quán)利要求1所述的一種基于復(fù)雜環(huán)境下實(shí)現(xiàn)開(kāi)關(guān)可滑動(dòng)可點(diǎn)擊的方法,其特征在于:所述根據(jù)手指按在開(kāi)關(guān)滑塊上的移動(dòng)距離實(shí)時(shí)刷新界面,具體為:根據(jù)手指按在開(kāi)關(guān)滑塊上的移動(dòng)距離來(lái)改變開(kāi)關(guān)滑塊距離界面左邊界的值,當(dāng)這個(gè)值等于最大值時(shí)就不再變大,所述最大值為開(kāi)關(guān)視圖的長(zhǎng)度減去開(kāi)關(guān)滑塊的長(zhǎng)度,開(kāi)關(guān)滑塊的移動(dòng)距離變化時(shí),界面也隨之刷新。5.根據(jù)權(quán)利要求4所述的一種基于復(fù)雜環(huán)境下實(shí)現(xiàn)開(kāi)關(guān)可滑動(dòng)可點(diǎn)擊的方法,其特征在于:所述根據(jù)此時(shí)開(kāi)關(guān)滑動(dòng)的距離判斷開(kāi)關(guān)狀態(tài),具體為:根據(jù)此時(shí)開(kāi)關(guān)滑動(dòng)的距離是否超過(guò)所述最大值的一半判斷開(kāi)關(guān)狀態(tài),若超過(guò)最大值,開(kāi)關(guān)狀態(tài)為開(kāi),否則,開(kāi)關(guān)狀態(tài)為關(guān),并刷新界面。6.根據(jù)權(quán)利要求1所述的一種基于復(fù)雜環(huán)境下實(shí)現(xiàn)開(kāi)關(guān)可滑動(dòng)可點(diǎn)擊的方法,其特征在于:所述復(fù)雜環(huán)境包括:滑動(dòng)類及滾動(dòng)類的視圖控件,繼承自容器類的控件ViewGroup的自定義控件,或者原生控件的環(huán)境下;所述滑動(dòng)類及滾動(dòng)類的視圖控件包括ViewPager控件、ListView 控件、ScrollView 控件、HorizontalScrolIView 控件。7.根據(jù)權(quán)利要求1所述的一種基于復(fù)雜環(huán)境下實(shí)現(xiàn)開(kāi)關(guān)可滑動(dòng)可點(diǎn)擊的方法,其特征在于:在復(fù)雜環(huán)境的外部控件對(duì)外部觸摸事件處理的情況下,開(kāi)關(guān)的觸摸事件將與所述外部觸摸事件的處理產(chǎn)生沖突,而開(kāi)關(guān)的觸摸事件無(wú)法得到執(zhí)行時(shí),要重寫dispatchTouchEvent (Mot1nEvent event)方法,在這個(gè)方法內(nèi)部調(diào)用 requestDisallowInterceptTouchEvent (true)方法,請(qǐng)求外部控件的父控件不要攔截開(kāi)關(guān)的觸摸事件,讓開(kāi)關(guān)類SuperButton自己處理發(fā)生的開(kāi)關(guān)的觸摸事件;所述開(kāi)關(guān)的觸摸事件包括:按下事件、移動(dòng)事件或抬起事件。
【專利摘要】本發(fā)明提供了一種基于復(fù)雜環(huán)境下實(shí)現(xiàn)開(kāi)關(guān)可滑動(dòng)可點(diǎn)擊的方法,所述方法為:1、在復(fù)雜環(huán)境下創(chuàng)建一開(kāi)關(guān)類SuperButton,獲得該開(kāi)關(guān)類SuperButton的背景圖片所占的大小作為一開(kāi)關(guān)視圖的大小,并將該開(kāi)關(guān)視圖繪制到屏幕上;2、開(kāi)關(guān)視圖顯示后,對(duì)開(kāi)關(guān)視圖加入點(diǎn)擊和滑動(dòng)的控制邏輯;3、接收手指對(duì)開(kāi)關(guān)視圖的滑動(dòng)或點(diǎn)擊事件,完成開(kāi)關(guān)的滑動(dòng)或點(diǎn)擊處理。本發(fā)明使得控件能夠完美適用各種簡(jiǎn)單或者復(fù)雜的應(yīng)用場(chǎng)景,不會(huì)出現(xiàn)卡頓甚至不能正常開(kāi)關(guān)的情況。
【IPC分類】G06F9/44, G06F3/0488, G06F3/0481
【公開(kāi)號(hào)】CN105242927
【申請(qǐng)?zhí)枴緾N201510648000
【發(fā)明人】沈文策
【申請(qǐng)人】沈文策
【公開(kāi)日】2016年1月13日
【申請(qǐng)日】2015年10月9日