導航:首頁 > 操作系統 > android繼承兩個類

android繼承兩個類

發布時間:2023-12-05 18:00:06

1. android怎麼用雙繼承

不要太貪心哦!

2. Carson帶你學Android:手把手教你寫一個完整的自定義View

自定義View一共分為兩大類,具體如下圖:

對於自定義View的類型介紹及使用場景如下圖:

在使用自定義View時有很多注意點(坑),希望大家要非常留意:

View的內部本身提供了post系列的方法,完全可以替代Handler的作用,使用起來更加方便、直接。

主要針對View中含有線程或動畫的情況: 當View退出或不可見時,記得及時停止該View包含的線程和動畫,否則會造成內存泄露問題

當View帶有滑動嵌套情況時,必須要處理好滑動沖突,否則會嚴重影響View的顯示效果。

接下來,我將用自定義View中最常用的 繼承View 來說明自定義View的具體應用和需要注意的點

在下面的例子中,我將講解:

下面我將逐個步驟進行說明:
步驟1:創建自定義View類(繼承View類)

特別注意:

步驟2:在布局文件中添加自定義View類的組件及顯示

至此,一個基本的自定義View已經實現了,運行效果如下圖。

接下來繼續看自定義View關於屬性自定義的問題:

先來看wrap_content & match_parent屬性的區別

如果不手動設置支持 wrap_content 屬性,那麼 wrap_content 屬性是不會生效(顯示效果同 match_parent )

padding 屬性:用於設置控制項內容相對控制項邊緣的邊距;

如果不手動設置支持padding屬性,那麼padding屬性在自定義View中是不會生效的。

繪制時考慮傳入的padding屬性值(四個方向)。

除了常見的以android:開頭的系統屬性(如下所示),很多場景下自定義View還需要系統所沒有的屬性,即自定義屬性。

實現自定義屬性的步驟如下:

下面我將對每個步驟進行具體介紹

對於自定義屬性類型 & 格式如下:

至此,一個較為規范的自定義View已經完成了。

Carson_Ho的github: 自定義View的具體應用

不定期分享關於 安卓開發 的干貨,追求 短、平、快 ,但 卻不缺深度

3. Android手勢---GestureDetector

GestureDetector 可以使用 MotionEvents 檢測各種手勢和事件。

這個類只能用於檢測觸摸事件的 MotionEvent

GestureDetector有三個內部介面,兩個內部類

他們都是起到監聽器的作用

注意:SimpleOnGestureListener繼承了GestureDetector的三個內部介面

GestureDetector自帶了五個構造方法,但是有兩個被廢棄了

因為第三個調用第二個,所以只要關注前面兩個就行了

我們發現第二個構造方法中多了一個Handler變數
一般來說,不會使用這個構造方法

但是因為GestureDetector中的數據是給GestureHandler內部類進行處理,這個類會使用Handle,由穗穗Handler的知識知道,創建Handler必須有Looper,但是在一些新開的線程中沒有創建Looper,所以我們需要傳入一個帶了Looper的Handler變數,否則,GestureDetector對象會創建失敗

按下是所以手勢必定有的動作
所以無論什麼手勢,第一個調用的方法就是onDown

注意:
GestureDetector的點擊對圖片,按鈕等無用

為了解決這個問題,我們可以

這兩個方法都可以響應到單擊事件,但是他們之間還是有區別的

當我們同時在監聽器中覆寫這兩個方法,並且進行單擊事件
我們會發現當進行單擊事件的時候,這幾個方法響應的順序是這樣的

首先onDown()必定是第一個執行的,但是會發現onSingleTapUp在onSingleComfirmed之前執行
我查閱了相關文檔,發現他們雖然同樣響應的是當手指離開屏幕的活動,但是 onSingleTapUp是立即執行 ,而 onSingleComfirmed卻要在離開後300ms後才執行 ,這樣悉世的目的是確認我們進行的是單擊事件(為了防止我們在300ms內再次進行單擊事件),所以他們的名字分別是Up和Comfirmed

所以,在 設置雙擊事件時,最好使用onSingleComfirmed(),進行雙擊時不會回調單擊方法

這兩個方法都可以響應雙擊事件,為了驗證他們的區別,我們同樣在一個響應器中覆寫這兩個方法,並且進行雙擊事件(我們這里單擊事件使用onSingleComfirmed)

我們使用Log.e()把方法響應的順序弄出來,發現他們規律很神奇

然後我在onDoubleTapEvent()中吧MotionEvent e 輸出,
然後方法響應的順序變成:

我們對以上信息進行分析:
DoubleTap在DoubleTapEvent前面執行,但是根據DoubleTapEvent的第一個MotionEvent是Down,所以判斷 雙擊的響應條件是在第一次單擊後的300ms內按下手指

我們又嘗試在雙擊後手指不離開屏幕,可見隨時間的延長,Move也變得更多,
由此判斷, onDoubleTapEvent是實時回調的,並且是用來檢測MotionEvent

這次我們在響應器中覆寫所有方法,進行長按操作
發現方法響應的順序為:

也就是說,在長按睜族肢時,onShowPress在onLongPress前面執行

同樣,我們覆寫所有方法,進行滑動操作,
發現方法的響應順序為

由此可見,在滑動/拖動過程中,不斷調用onScroll,最後調用onFiling

當然,Android自帶的手勢不能完全滿足我們的需求,於是Android提供了自建手勢的方法,這些內容將在下一篇博客中陳述

4. 如何在androidmanifest.xml 聲明繼承application的類

一般新建一個Android項目後,AndroidManifest/apk/res/android" package="com.myactivities" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".ActivityMain" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>可以看到manifest的一個屬性package="com.myactivities",以後自己新建的多個activity都必須放在com.myactivities這個包裡面。問題是現在我如果另外新建一個包,在裡面新建幾個activity類文件,這幾個activity如何在AndroidManifest.xml里注冊呢?我最後想達到的目的是com.myactivities裡面的activity通過intent跳轉到新建的包裡面的某個activity,這個怎麼實現呢? --------------------------------------------------------------------- 每一個Activity、Service等應用程序組件都會對應AndroidManifest.xml文件中的一個<activity>、<service>標簽。在這些標簽中有一個必選的屬性:android:name,該屬性需要指定一個類名,例如,net.blogjava.mobile.Main類。指定android:name屬性值有如下3種方式: 1. 指定完全的類名(packagename+classname),例如,net.blogjava.mobile.Main。 2. 只指定類名,例如,.Main,其中Main前面的「.」是可選的。該類所在的包名需要在<manifest>標簽的package屬性中指定。 3. 指定相對類名,這種方式類似於第2種方式,只是在<activity>標簽的android:name屬性中不光指定類名,還有部分包名。例如,如果Main類在net.blogjava.mobile.abcd包中,就可以在<manifest>標簽的package屬性中指定net.blogjava.mobile,然後在<activity>標簽的android:name屬性中指定.abcd.Main。 由此可見,package的目的是為了更方便地指定android:name以及其他相關屬性的值,就是一個默認的包。如果不在android:name中指定包名,會自動將package屬性值加在前面。

5. android studio 能 新建 繼承自己定義的類的子類嗎

1.首先當子類繼承了父類,因此子類(當繼承方式為public或protected時)可以訪問及改動父類的public成員,但訪問或改不了私有成員和不可訪問變數;
2.但父類沒繼承子類,所以父類沒有權利訪問(操作)子類的成員變數;

但是你的你想用父類的函數來訪問(操作)子類成員的話,可以在子類再定義一個父類的同樣一個函數,用虛函數;然後用父類指針指向子類對象,來解決你的問題。這個後面再學的學的知識,現在暫時可以認為「不能操作子類自己定義的成員變數」。

閱讀全文

與android繼承兩個類相關的資料

熱點內容
怎麼用c語言編譯簡單的小游戲 瀏覽:814
伺服器如何以域用戶登錄 瀏覽:602
安卓os14怎麼默認桌面 瀏覽:549
應用市場下載在哪個文件夾 瀏覽:895
安卓上的谷歌地圖怎麼用 瀏覽:183
安卓命令行打包 瀏覽:516
編程文字與數字教學視頻 瀏覽:817
如何看手機號碼注冊哪些app 瀏覽:413
linux查看總內存 瀏覽:852
python進程間共享 瀏覽:438
js如何獲取本地伺服器地址 瀏覽:70
gfx什麼時候支持安卓十一系統 瀏覽:941
壓縮機90兆帕 瀏覽:932
程序員調侃語句 瀏覽:582
不是php函數的是 瀏覽:1001
壓縮文件好處 瀏覽:787
3d266期神童三膽計演算法 瀏覽:189
通過愛思助手怎麼下載app 瀏覽:323
vi命令將文件創在桌面上 瀏覽:925
程序員做競價 瀏覽:698