編輯:關於Android編程
Android中一個控件可以同時注冊多種事件,像一個Button,可以同時監聽觸摸事件、單擊事件、長按事件;在不同的情況下可以執行不同的操作,那麼是如何做到的呢?
首先,onTouch事件是最先發生的,該事件的返回值也決定了長按事件和單擊事件能否發生。觸屏操作由一些基本的事件組成:如down事件,up事件,move事件,scroll事件等等,經測試,各事件執行順序結果如下:
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "單擊事件", Toast.LENGTH_LONG).show(); } }); button.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub // Toast.makeText(MainActivity.this, "觸摸事件", Toast.LENGTH_LONG).show(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Toast.makeText(MainActivity.this, "down事件", Toast.LENGTH_SHORT).show(); break; case MotionEvent.ACTION_UP: Toast.makeText(MainActivity.this, "up事件", Toast.LENGTH_SHORT).show(); break; default: break; } return true; } }); button.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "長點擊事件", Toast.LENGTH_LONG).show(); return false; } }); }
(1)down--up--longClick--click; 觸摸事件--長按事件--單擊事件
(2)down--up--click; 觸摸事件--單擊事件
造成這兩種情況的原因是手指按下去停留時間的長短,如果長按了,就走(1);如果短暫點擊,就走(2).
2.onTouch事件返回true;true即為消費該事件,事件不在傳遞下去,不會發生單擊或長按事件。發生的操作:
down--up
3.onTouch返回false,onLongClick返回true。發生的操作:
(1)down--up--longClick 觸摸事件--長按事件
(2)down--up--click 觸摸事件--單擊事件
通過1與3比較,發現如果不手動改變onLongClick事件返回值,發生長按事件時,一定會導致單擊事件發生。
當然這只是從表面理解onTouch事件,如果想更深入學習,請查看下面文章:點擊打開鏈接
在我們開發app時,TextView一定是使用最多的控件了,android自帶的TextView的功能也十分強大,但還是有些小的地方不能滿足我們的需求,幾天要說的這個功能
衛星菜單可能網上已經有很多博文了,but,這裡僅記錄下自己的學習路程~剛看到自定義衛星菜單的時候真的是一臉懵逼,看完所有的源碼覺得還可以接受,自己寫難度較大,功力太薄嗚嗚
1 職責鏈模式 職責鏈模式的意圖為:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連
最近心情比較浮躁,項目初步已經完成一直沒有心情來更新博客,基本功能已經實現了包括添加城市,刪除城市,獲取城市部分天氣預報信息,已經詳細的天氣預報信息,還集成了ShareS