[Android]開(kāi)發(fā)App其障,你得知道這些3——觸摸事件等

0.前言

  • 上一篇文章中矿瘦,我們講解了Android的幾種布局方式
    有興趣的可以去看一看

準(zhǔn)備工作

在讀本文前掐暮,你最好有以下準(zhǔn)備:

  • (1)安裝Android Stuido(以下簡(jiǎn)稱AS
  • (2)有一定的Java基礎(chǔ)
  • (3)有一臺(tái)安卓機(jī)
    (可以用模擬器來(lái)代替蝎抽,包括AS自帶的以及網(wǎng)上的一些著名模擬器)
  • 若想要了解有關(guān)Java的文章等其他主要知識(shí),可以去看前面的文章

(不會(huì)使用AS的讀者可以參考下面這篇文章中的例子)
[Java]開(kāi)發(fā)安卓劫乱,你得掌握的Java知識(shí)2

1.本文內(nèi)容簡(jiǎn)介

  • 觸摸事件處理

  • 使用Tag查找子控件

  • 通過(guò)sharedPreference來(lái)存儲(chǔ)簡(jiǎn)單數(shù)據(jù)

2.基礎(chǔ)知識(shí)講解

觸摸事件處理

  • 觸摸事件處理有兩種方法:
    (1)回調(diào)機(jī)制
    (2)監(jiān)聽(tīng)機(jī)制
方法1 監(jiān)聽(tīng)機(jī)制

這種方法會(huì)設(shè)置一個(gè)監(jiān)聽(tīng)器(listener)织中,用來(lái)記錄監(jiān)聽(tīng)者。
監(jiān)聽(tīng)者必須實(shí)現(xiàn)對(duì)應(yīng)的接口衷戈,因此監(jiān)聽(tīng)者要重寫(xiě)觸發(fā)事件時(shí)運(yùn)行的方法狭吼。
當(dāng)事件觸發(fā)的時(shí)候,會(huì)看到底是誰(shuí)在監(jiān)聽(tīng)(找監(jiān)聽(tīng)者)殖妇。然后通過(guò)調(diào)用監(jiān)聽(tīng)者重寫(xiě)的方法刁笙,完成觸發(fā)事件

方法2 回調(diào)機(jī)制

這種方法中,可以看作監(jiān)聽(tīng)器不存在,事件監(jiān)聽(tīng)器與事件源統(tǒng)一疲吸。即用戶在組件上觸發(fā)某個(gè)事件時(shí)座每,組件會(huì)調(diào)用自己的方法以處理該事件。

具體代碼和語(yǔ)法在第3部分

通過(guò)tag來(lái)獲得子控件

  • 在xml文件中添加的控件峭梳,我們需要為其添加id,這樣才能在java文件中用id獲取指定的控件

  • 而在java文件中添加的控件蹂喻,則可以為其添加tag葱椭,以此在其他地方找到對(duì)應(yīng)的控件

  • 添加語(yǔ)句:
    int tag = 1;
    ImageView iv = new ImageView(this)
    lineView.setTag(tag)

  • android有四個(gè)組件,分別為activity口四、broadcast孵运、contentprivider、service蔓彩。在當(dāng)前的activity中用的是mainactivity.this

  • 通過(guò)tag獲取控件:
    ImageView iv2
    iv2.getTag(tag)
    這里的tag就是上面設(shè)置的那個(gè)治笨,注意set/getTag的參數(shù)都是int

通過(guò)sharedPreference來(lái)存儲(chǔ)簡(jiǎn)單數(shù)據(jù)

  • java一共有四種方式存儲(chǔ)數(shù)據(jù):
    (1)sharedPreference(偏好設(shè)置)(保存少量基本數(shù)據(jù))
    (2)file
    (3)sqlite3(保存數(shù)據(jù)量比較大的數(shù)據(jù),保存到服務(wù)器端的數(shù)據(jù)庫(kù)中)
    (4)network(只有這種不是保存在本地)

  • sharedPreference會(huì)保存在設(shè)備中的一個(gè)xml文件中

  • 由于是在xml中保存的赤嚼,所以不是適合存儲(chǔ)大量數(shù)據(jù)旷赖,一些設(shè)置選項(xiàng)可以考慮保存在這里

  • sharedPreference的使用分為寫(xiě)兩部分,分別對(duì)應(yīng)兩個(gè)對(duì)象

  • 最后一定要使用.commit()或者.apply()來(lái)保存更卒,它們的區(qū)別:
    editor.commit();//立刻保存
    editor.apply();//異步保存杠愧,讓一個(gè)線程處理保存,不是馬上

  • 在Device File Exploer->data->data->項(xiàng)目名->shared_prfes->文件名.xml

  • 具體代碼逞壁,以及數(shù)據(jù)保存在哪里,在下文說(shuō)

3.實(shí)際操作

觸摸事件——監(jiān)聽(tīng)機(jī)制

第一步 打開(kāi)activity_main.xml
第二步 把布局改一下(為了方便寫(xiě)代碼)
第三步 添加一個(gè)控件

<ImageView
android:id="@+id/box"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@color/colorPrimary"
android:layout_centerInParent="true"/>


第四步 打開(kāi)MainActivity锐锣,并找到這個(gè)控件
  • 在onCreate中腌闯,用id找到這個(gè)控件
    ImageView iv = findViewById(R.id.box);
    這里的R.id.box表示res中的id名為box的控件
    ( android:id="@+id/box")這句話添加了id
第五步 給這個(gè)控件添加監(jiān)聽(tīng)器
  • 直接在控件后面輸入一個(gè)點(diǎn).,然后輸入setOnTouch雕憔。姿骏。〗锉耍看到可以選擇之后直接回車(chē)

  • 接著在括號(hào)內(nèi)分瘦,先看它需要什么參數(shù)(按ctrl+p),然后先輸入一個(gè)new琉苇,然后照著需要的參數(shù)的類(lèi)型輸入嘲玫,就可以看到



  • 回車(chē)之后就變?yōu)椋?/p>

  • 最后在方法里面書(shū)寫(xiě)觸發(fā)事件時(shí),需要執(zhí)行的內(nèi)容


    (這里要按照?qǐng)D里一樣并扇,把return 的值改為true)

  • 以上即為比較常用的去团,通過(guò)匿名類(lèi)來(lái)處理監(jiān)聽(tīng)機(jī)制

其他相關(guān)的監(jiān)聽(tīng)方法:

(1)在括號(hào)內(nèi)不寫(xiě)new什么的,而寫(xiě)一個(gè)this,表示當(dāng)前的這個(gè)界面
然后在this(低下會(huì)畫(huà)紅線)旁邊按alt+enter土陪,選擇有implement那個(gè)昼汗,表示這個(gè)MainActivity實(shí)現(xiàn)這個(gè)接口



選擇要實(shí)現(xiàn)的方法之后,在這個(gè)方法寫(xiě)具體內(nèi)容即可



(2)可以單獨(dú)創(chuàng)建一個(gè)實(shí)現(xiàn)該接口的類(lèi)鬼雀,然后創(chuàng)建一個(gè)這個(gè)類(lèi)的對(duì)象顷窒,放在括號(hào)中,而不是使用匿名類(lèi)

  • 使用匿名類(lèi)一般是只需要處理這一個(gè)事件源哩。如果有多個(gè)時(shí)間鞋吉,可以考慮創(chuàng)建一個(gè)類(lèi),或者是使用方法(1)

觸摸事件——回調(diào)機(jī)制

第一步 找到要觸發(fā)這個(gè)事件的類(lèi)(如果是整個(gè)屏幕璧疗,就找MainActivity)
第二步在里面寫(xiě)onTouchEvent(MotionEvent event)這個(gè)方法

當(dāng)觸摸事件被觸發(fā)的時(shí)候坯辩,系統(tǒng)就會(huì)回調(diào)這個(gè)被重寫(xiě)的方法

  • 如果是寫(xiě)在MainActivity中的話,這個(gè)方法要寫(xiě)在onCreate外面


  • return要改為true
  • 這里可以使用event.getAction這個(gè)方法崩侠,它返回的是一個(gè)int漆魔,不同的int代表著不同的時(shí)間,而Motion.事件名則分別對(duì)應(yīng)這事件(Motion.事件名是已經(jīng)被定義好的int)



    表示如果有按下的事件

通過(guò)sharedPreference來(lái)存儲(chǔ)簡(jiǎn)單數(shù)據(jù)

語(yǔ)法順序如下:
SharedPreferences sp = getSharedPreferences(fileName,MODE_PRIVATE);
其中却音,fileName為文件名改抡,MODE_PRIVATE代表該文件是私有數(shù)據(jù)

然后,通過(guò)以下語(yǔ)句系瓢,存儲(chǔ)密碼
SharedPreferences.Editor editor = sp.edit();
editor.putString("password",inputPassword);
editor.commit();

  • 其中阿纤,inputPassword是需要存儲(chǔ)的值,"password"是這個(gè)值的“鍵”(一個(gè)名字)夷陋,就是通過(guò)這個(gè)名字欠拾,可以找到inputPassword
  • 必須有editor.commit()進(jìn)行保存(第二部分有說(shuō)過(guò)兩種保存的方式)

String orgPassword = sp.getString("password",null);
用這句話來(lái)獲得SharedPreference所存的xml文件中對(duì)應(yīng)值的內(nèi)容

  • null表示如果沒(méi)有名字叫password的,那么返回一個(gè)null

3.總結(jié)

(1)觸發(fā)事件的方法需要熟練清楚骗绕,在后面的內(nèi)容中經(jīng)常需要使用到這些
(2)如果需要給某些控件代號(hào)的話藐窄,可以用setTag,然后到時(shí)候用getTag就能分辨到底是哪個(gè)控件
(3)SharedPreference只能存儲(chǔ)少量數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酬土,一起剝皮案震驚了整個(gè)濱河市荆忍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撤缴,老刑警劉巖刹枉,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屈呕,居然都是意外死亡微宝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)凉袱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)芥吟,“玉大人侦铜,你說(shuō)我怎么就攤上這事≈油遥” “怎么了钉稍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棺耍。 經(jīng)常有香客問(wèn)我贡未,道長(zhǎng),這世上最難降的妖魔是什么蒙袍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任俊卤,我火速辦了婚禮,結(jié)果婚禮上害幅,老公的妹妹穿的比我還像新娘消恍。我一直安慰自己,他們只是感情好以现,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布狠怨。 她就那樣靜靜地躺著,像睡著了一般邑遏。 火紅的嫁衣襯著肌膚如雪佣赖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天记盒,我揣著相機(jī)與錄音憎蛤,去河邊找鬼。 笑死纪吮,一個(gè)胖子當(dāng)著我的面吹牛俩檬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碾盟,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼豆胸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了巷疼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤灵奖,失蹤者是張志新(化名)和其女友劉穎嚼沿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瓷患,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骡尽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了擅编。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攀细。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箫踩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谭贪,到底是詐尸還是另有隱情境钟,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布俭识,位于F島的核電站慨削,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏套媚。R本人自食惡果不足惜缚态,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堤瘤。 院中可真熱鬧玫芦,春花似錦、人聲如沸本辐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)师郑。三九已至环葵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宝冕,已是汗流浹背张遭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留地梨,地道東北人菊卷。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宝剖,于是被迫代替她去往敵國(guó)和親洁闰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容