事件處理 靜宜大學資管系 楊子青.

Slides:



Advertisements
Similar presentations
Android ADT + Android SDK Eclipse Eclipse 編輯器 JAVA JAVA 開發工具.
Advertisements

3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
實驗五:多媒體播放器選單介面.
Part 2 開發Android應用程式的流程
第一章 面向对象程序设计.
位置與地圖應用 此投影片為講解Android如何取得定位經緯度和使用Google Map地圖.
Ch07 介面與多重繼承 物件導向程式設計(II).
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
Android App 系統開發教學 Luna 陳雯琳 2014/12/18
使用Android Studio 開發Android App 靜宜大學資管系 楊子青
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
實驗四:單位轉換程式.
第2章 建立Android應用程式 2-1 Java語言、XML文件與Android 2-2 建立第一個Android應用程式
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
實驗十三:顯示目前經緯度位置.
Ch06 再談選單元件 物件導向系統實務.
使用Android控制Arduino 史先强
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
第8章 Android内容提供者(ContentProvider)应用
Chapter 6 Advanced UI Design.
Ch5 Android應用程式的主要組成.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Chapter 6 進階UI設計.
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
CH7 佈局、按鈕與文字編輯元件.
Android + Service 建國科技大學 資管系 饒瑞佶.
實驗十四:顯示與控制地圖.
Text To Speech (TTS, 文字轉語音) 靜宜大學資管系 楊子青
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
類別的繼承 Vehicle Car.
Visual Basic 物件導向程式設計簡介.
第6章 建立Android使用介面 6-1 介面元件的基礎 6-2 Android的事件處理 6-3 按鈕元件 6-4 文字元件
Android App簡介及 App Inventor 2體驗 靜宜大學資管系 楊子青
第5讲 使用类和对象编程(三) 内部类 实例 程序控制结构 选择语句.
第16章 虛擬與多形 16-1 虛擬函數 16-2 純虛擬函數與抽象類別 16-3 多形 16-4 虛擬繼承與虛擬解構子.
實驗十一:待辦事項程式 (儲存在手機上).
主编:钟元生 赵圣鲁.
App Inventor 2初體驗 靜宜大學資管系 楊子青
JAVA 编 程 技 术 主编 贾振华 2010年1月.
Chapter 5 Basic UI Design.
實驗九:延續實驗八, 製作一個完整音樂播放器
Location Based Services - LBS
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
補間動畫 (Tween Animation) 靜宜大學資管系 楊子青
Text To Speech (TTS, 文字轉語音) 靜宜大學資管系 楊子青
HelloPurr_Extend 靜宜大學資管系 楊子青
第二章 Java语法基础.
螢幕觸控及手勢辨別 靜宜大學資管系 楊子青.
CustomView(自定義視圖) 、 畫布、顏色及多點觸控 靜宜大學資管系 楊子青
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
Text To Speech (TTS, 文字轉 語音)、讀簡訊 靜宜大學資管系 楊子青
從HTML表格到CSS 靜宜大學 資管系 楊子青.
第二章 Java基本语法 讲师:复凡.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
RecyclerView and CardView
實驗十:影片播放.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
Android Studio 程式設計基礎 靜宜大學資管系 楊子青
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
加速感測器 靜宜大學資管系 楊子青.
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
SQLite資料庫 靜宜大學資管系 楊子青.
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
Presentation transcript:

事件處理 靜宜大學資管系 楊子青

補充:物件導向的介面 (Interface) 現實世界中,許多『不同類』的事物,其間通常會具有一些相似的行為 例:飛機和小鳥顯然是不同的類別,飛行方式也不同,但均具有「飛行」的行為 為了不打亂原有的繼承架構,需要在各自的類別中定義各自的行為 在實作時避免造成遺漏或命名不一致,在 Java 中特別提供了介面(Interface)來描述這個共通的行為

Java有關Interface的語法 宣告Interface interface Shape { public double Shape_PI = 3.14; public double area(); public double perimeter(); }

Java有關Interface的語法 Class實作Interface class Circle implements Shape { private double radius; public Circle(double r) { setRadius(r); } public Circle() { this(10.0); public double getRadius() { return radius; public void setRadius(double r) { if (r > 0.0) { radius = r; } else { radius = 1; public double area() { return radius * radius * Shape_PI; public double perimeter() { return 2 * radius * Shape_PI;

Java有關Interface的語法 Class實作Interface class Rectangle implements Shape { private double length; private double width; public Rectangle(double l, double w) { setLength(l); setWidth(w); } public double area() { return length * width; public double perimeter() { return 2 * (length + width);

1. 事件處理之機制 來源物件與監聽物件

onClickListener介面

「計數器」專案Counter 選擇Empty Activity 修改成Linear Layout (vertical) TextView 重新命名id為@+id/txv text初值為0 textSize為36sp Layout_width設為match_parent gravity勾center

this表示MainActivity物件本身 2.讓txv也可以觸發Click,每次加1 加入介面宣告 public class MainActivity extends AppCompatActivity implements View.OnClickListener { onCreate方法,登錄監聽物件 TextView txv = (TextView) findViewById(R.id.txv); txv.setOnClickListener(this); 程式 int counter=0; public void onClick(View v) { counter++; txv.setText(Integer.toString(counter)); } this表示MainActivity物件本身 Integer.toString : 將 整數轉換成字串

3.加入按鈕進行歸零 Button元件 id為@+id/btn text為:歸零 textSize為36sp

讓btn觸發Click (不需在onClick屬性填method之作法) onCreate方法,登錄監聽物件 Button btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(this); 處理不同來源物件的相同事件(txv及btn均登錄了click事件) getId():判斷事件的來源物件

讓btn觸發Click,重設為0 int counter=0; public void onClick(View v) { if (v.getId() == R.id.txv){ counter++; } else{ counter = 0; TextView txv = (TextView) findViewById(R.id.txv); txv.setText(Integer.toString(counter));

4.讓txv觸發LongClick(長按)事件 加入介面宣告 public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnLongClickListener { onCreate方法,登錄監聽物件 TextView txv = (TextView) findViewById(R.id.txv); txv.setOnClickListener(this); txv.setOnLongClickListener(this); onLongClick()方法:需有boolean回傳值 true表示操作至此結束,手指放開不會再觸發click事件 false表示使用者放開手指,立即引發click事件

如果改成return dalse,每次會變成加3 讓txv觸發LongClick,每次加2 public boolean onLongClick(View v){ TextView txv = (TextView) findViewById(R.id.txv); counter += 2; txv.setText(String.valueOf(counter)); return true; } 長按數字,每次加2 如果改成return dalse,每次會變成加3 (長按加2後,又觸發click事件再加1)

5. onTouch(觸控)事件 可用來偵測「按下」與「放開」的動作 新增一個TextView 重新命名為@+id/txvvb 初始文字為「震動」 字體大小為36sp

onTouch事件 加入介面宣告 onCreate方法,登錄監聽物件 onTouch()方法:需有boolean回傳值 public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnLongClickListener, View.OnTouchListener { onCreate方法,登錄監聽物件 TextView txvvb = (TextView) findViewById(R.id.txvvb); txvvb.setOnTouchListener(this); onTouch()方法:需有boolean回傳值 true表示要處理接續的觸控事件,才能接收到手指放開的動作

如何讓手機震動? 需先至AndroidManifest.xml登記『震動』的使用權限 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="tw.edu.pu.cs.tcyang.counter" > <uses-permission android:name="android.permission.VIBRATE"> </uses-permission> <application …

讓txvvb觸發onTouch事件,震動5秒 public boolean onTouch(View v, MotionEvent event){ Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); vb.vibrate(5000); return true; } 利用event.getAction()傳遞的參數 可得知觸控的種類(按下或放開)

onTouch事件,判斷按下或放開

修改程式,讓手指移開則停止震動 public boolean onTouch(View v, MotionEvent e){ Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); if (event.getAction() == MotionEvent.ACTION_DOWN){ vb.vibrate(5000); } else if (event.getAction() == MotionEvent.ACTION_UP){ vb.cancel(); return true; 建立apk,安裝到行動裝置試試看

常用的事件回撥方法 (Event Callback Methods) 傾聽者介面 事件來源 onClick() OnClickListener 觸摸螢幕或按下按鍵 onLongClick() OnLongClickListener 觸摸螢幕超過1秒鐘 onKey() OnKeyListener 按下行動裝置的按鍵 onTouch() OnTouchListener 觸摸螢幕 onFocusChange() OnFocusChange 焦點改變 onCreateContextMenu() 長按選單

實例:Kitty隨機變Lion 建立新的專案:Kitty 選擇Empty Activity 修改成Linear Layout (vertical) TextView 重新命名id為@+id/txv text初值為0 textSize為36sp Layout_width設為match_parent gravity勾center

放入kitty.png及lion.jpg 於res的drawable,按滑鼠右鍵,選show in Explorer,將兩張圖形檔copy進去

加入一個imageView元件 設定id屬性:「@+id/img」

使用者點選圖片,每次加1 監聽事件的另一種寫法 public class MainActivity extends AppCompatActivity { int Counter = 0; TextView txv; ImageView img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txv = (TextView) findViewById(R.id.txv); img = (ImageView) findViewById(R.id.img); img.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Counter++; txv.setText(Integer.toString(Counter)); } }); 監聽事件的另一種寫法

隨機2~6次會從kitty變成lion (新增NewGame) int rnd; public void NewGame(){ Random x =new Random(); rnd = x.nextInt(5) + 2; img.setImageResource(R.drawable.kitty); }

隨機2~6次會從kitty變成lion (修改onCreate裡面的程式碼) img = (ImageView) findViewById(R.id.img); img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (Counter == 0) { NewGame(); } Counter++; txv.setText(Integer.toString(Counter)); if (Counter == rnd) { img.setImageResource(R.drawable.lion); Counter = 0; });

加入聲音檔 於res,按滑鼠右鍵,選show in Explorer,在裡面新建立raw資料夾,將兩個聲音檔copy進去

修改MainActivity.java程式 變數宣告部分 int Counter = 0; int rnd; TextView txv; ImageView img; MediaPlayer mediaPlayer;

修改onClick程式碼 設定及播放聲音 if (Counter == rnd) { img.setImageResource(R.drawable.lion); Counter = 0; mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.roar); } else{ mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.meow); mediaPlayer.start();

參考資料 施威銘主編,Android App程式設計教本之無痛起步 - 使用Android Studio開發環境,旗標出版社,2015年。 第4章:與使用者互動–事件處理