當(dāng)前位置:首頁(yè) > 學(xué)習(xí)資源 > 講師博文 > 安卓開發(fā)中實(shí)用的例子
安卓開發(fā)中實(shí)用的例子
時(shí)間:2018-10-28 來(lái)源:華清遠(yuǎn)見(jiàn)
我們?cè)趯?shí)際開發(fā)中經(jīng)常會(huì)需要按鍵,但是如果像平時(shí)使用OnClickListener 來(lái)監(jiān)聽的話,其實(shí)是不能滿足我們的需求的,比如要做一個(gè)按鍵的秒表app,按下開始計(jì)時(shí),放開停止計(jì)時(shí),如果用上面的OnClickListener監(jiān)聽器來(lái)監(jiān)聽,只能監(jiān)聽到按鍵抬起時(shí)的動(dòng)作,那么按下抬起動(dòng)作分開監(jiān)聽的話如何實(shí)現(xiàn),這里作者自己實(shí)現(xiàn)的一個(gè)方法,大家可以參考。
Java Code
textView = (TextView) findViewById(R.id.textView1);
button = (Button) findViewById(R.id.button1);
ButtonListener b = new ButtonListener();
button.setOnClickListener(b);
button.setOnTouchListener(b);
handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
if(msg.what == 0x1234)
{
textView.setText("計(jì)時(shí):" + msg.obj + " 秒");
}
}
};
這里我們利用內(nèi)部類去從寫了兩個(gè)監(jiān)聽器里的方法,以便比較,一個(gè)是上面所講的OnClickListener,另一個(gè)是實(shí)現(xiàn)我們監(jiān)聽按下抬起兩個(gè)動(dòng)作的OnTouchListener,內(nèi)部類的代碼如下:
Java Code
class ButtonListener implements OnClickListener, OnTouchListener
{
public void onClick(View v)
{
if(v.getId() == R.id.button1)
{
Log.d("test", "cansal button ---> click");
Toast tst = Toast.makeText(MainActivity.this, "33333333",
Toast.LENGTH_SHORT);
tst.show();
}
}
public boolean onTouch(View v, MotionEvent event)
{
if(v.getId() == R.id.button1)
{
if(event.getAction() == MotionEvent.ACTION_DOWN) //判斷動(dòng)作,如果是按下的話,置位標(biāo)志位,開啟線程
{
state = true;
new MyThread().start();
}
if(event.getAction() == MotionEvent.ACTION_UP) //如果是抬起,則將標(biāo)志位復(fù)位,使線程退出
{
state = false;
}
}
return false;
}
}
因?yàn)檫@里我們要實(shí)現(xiàn)一個(gè)按下開始計(jì)時(shí),抬起停止計(jì)時(shí)功能,所以計(jì)時(shí)功能需要在一個(gè)線程里去實(shí)現(xiàn),這里使用handler-message實(shí)現(xiàn),方法如下:
Java Code
class MyThread extends Thread
{
@Override
public void run()
{
// TODO Auto-generated method stub
super.run();
while(state)
{
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Message message = new Message();
message.what = 0x1234;
message.obj = count++;
handler.sendMessage(message);
//handler.sendEmptyMessage(0x1234);
}
}
}
線程里1秒count加一次,并將count數(shù)字傳到handler中,去更新textview內(nèi)容,此方法穩(wěn)定可行,系統(tǒng)資源占用少,用在其他項(xiàng)目中有不錯(cuò)的效果。
運(yùn)行結(jié)果:
按下時(shí)

抬起時(shí)

課程分享:華清遠(yuǎn)見(jiàn)聯(lián)合NXP推出i.MX8M Plus開發(fā)與實(shí)踐
課程分享:鴻蒙HarmonyOS系統(tǒng)及物聯(lián)網(wǎng)開發(fā)實(shí)戰(zhàn)課程(
課程分享:HaaS EDU K1開發(fā)教程(附課程視頻及源碼下
新版C語(yǔ)言編程之控制語(yǔ)句視頻教程重磅贈(zèng)送(嵌入式入
價(jià)值2000元的嵌入式精裝教程大禮包免費(fèi)送!(搞懂嵌入
價(jià)值1000元的最新ARM系列視頻完整版教程新鮮出爐(免
【最新】ARM課程課堂實(shí)錄精華版視頻免費(fèi)領(lǐng)取(內(nèi)含源
如何利用機(jī)器學(xué)習(xí)構(gòu)建個(gè)性化推薦系統(tǒng)
嵌入式系統(tǒng)從上電到操作系統(tǒng)運(yùn)行的完整啟動(dòng)流程
如何在不同工作場(chǎng)景下優(yōu)化嵌入式系統(tǒng)的電源消耗
硬件抽象層(HAL)的設(shè)計(jì)如何提高代碼的可移植性
批量歸一化在深度學(xué)習(xí)訓(xùn)練中的作用和實(shí)現(xiàn)方法
物聯(lián)網(wǎng)項(xiàng)目中設(shè)計(jì)嵌入式系統(tǒng)時(shí)的關(guān)鍵技術(shù)和考慮因素
通過(guò)自然語(yǔ)言處理技術(shù)理解文本的深層含義
如何基于RISC-V架構(gòu)設(shè)計(jì)高效能的嵌入式系統(tǒng)
LSTM和GRU在時(shí)間序列預(yù)測(cè)中的應(yīng)用
JTAG和SWD的調(diào)試技術(shù)及應(yīng)用
