目錄
- 寫在前面的話
- 一、概述
- 二、處理鍵盤事件
- (一)概述
- (二)測驗-綜合
- 三、處理觸摸事件
- (一)測驗-移動位置
- 四、補充
寫在前面的話
1、主要參考自B站相關視頻,
2、內容如果有不對的,希望可以指出或補充,
3、鞏固內容,
一、概述
事件:就是用戶對于圖形界面的操作,在Android手機以及平板電腦上,主要包括鍵盤事件和觸摸事件兩大類,鍵盤事件包括按下、彈起等,觸摸事件包括按下、彈起、滑動、雙擊等,
1.基于回呼機制的事件處理(概括):以on開頭的方法,
2.基于監聽介面機制的事件處理(概括):以Listener結尾的,
二、處理鍵盤事件
(一)概述
1、單擊事件
該事件的監聽器是View.OnClickListener,事件處理方法是onClick(),
2、按鍵事件
用戶按下或者釋放手機鍵盤上的某個按鍵時產生,監聽器是View.OnKeyListener, 事件處理方法是onKey(),
3、焦點事件
組件得到或者失去焦點時產生該事件,監聽器是View.OnFocusChangeListener,事件處理方法是onFocusChange(),
(二)測驗-綜合
① 布局

② MainActivity.java
package com.example.test;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener,
View.OnKeyListener,View.OnFocusChangeListener{
private TextView t_title,t_text;
//宣告一個長度為2的陣列
ImageButton[] bt_cats = new ImageButton[2];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
//獲取到控制元件
t_title = findViewById(R.id.test_title);
t_text = findViewById(R.id.test_text);
bt_cats[0] = findViewById(R.id.test_cat1);//賦給陣列中的第一個元素
bt_cats[1] = findViewById(R.id.test_cat2);
//設定標題
t_title.setText("請通過鍵盤中的1、2或點擊\n來選擇你喜歡的貓咪");
//取出bt_cats里面的每一個元素并為它添加監聽器
for(ImageButton bt_cat:bt_cats){
//給bt_cat添加單擊事件監聽器
bt_cat.setOnClickListener(this);
//給bt_cat添加鍵盤按鍵監聽器
bt_cat.setOnKeyListener(this);
//給bt_cat添加焦點監聽器
bt_cat.setOnFocusChangeListener(this);
}
}
@Override
//實作OnClickListener介面中的方法 單擊事件
public void onClick(View v){
switch (v.getId()){
case R.id.test_cat1:
//設定提示文本
t_text.setText("這是一只布偶貓");
break;
case R.id.test_cat2:
t_text.setText("這是一只橘貓");
break;
}
}
@Override
//實作OnKeyListener介面中的方法 按鍵事件
public boolean onKey(View v, int keyCode, KeyEvent event) {
//判斷鍵盤碼
switch(keyCode){
case KeyEvent.KEYCODE_1:
//呼叫點擊事件并請求到焦點事件
bt_cats[0].performClick();
bt_cats[0].requestFocus();
break;
case KeyEvent.KEYCODE_2:
bt_cats[1].performClick();
bt_cats[1].requestFocus();
break;
}
return false;
}
@Override
//實作OnFocusChangeListener介面中的方法 焦點事件
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
//吐司提示
Toast toast = Toast.makeText(this, "獲得焦點", Toast.LENGTH_SHORT);
TextView tv = (TextView) toast.getView().findViewById(android.R.id.message);
tv.setTextColor(Color.YELLOW); //設定吐司字體顏色
toast.show();
//得到焦點時文本變成紅色
t_text.setTextColor(Color.RED);
}else{
t_text.setTextColor(Color.BLACK);
}
}
}
③ 測驗效果

三、處理觸摸事件
手機上具有觸屏功能時,觸碰螢屏產生該事件,監聽器是View.OnTouchListener,事件處理方法是onTouch(),
(一)測驗-移動位置
① 布局

② TestActivity.java
package com.example.test;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
public class TestActivity extends AppCompatActivity {
private ImageView t_img;
private LinearLayout t_layout;
private LinearLayout.LayoutParams LayoutParams;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test2);
//獲取到控制元件
t_img = (ImageView) findViewById(R.id.test_img);
t_layout = (LinearLayout) findViewById(R.id.test_layout);
// 獲取焦點
t_layout.setFocusable(true);
t_layout.requestFocus();
// 獲取影像控制元件的布局引數
LayoutParams = (LinearLayout.LayoutParams) t_img.getLayoutParams();
// 觸摸監聽事件
t_layout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// 根據變化的觸點坐標來更新影像控制元件的布局引數
LayoutParams.leftMargin = (int) event.getX();
LayoutParams.topMargin = (int) event.getY();
// 重新設定影像控制元件的布局引數
t_img.setLayoutParams(LayoutParams);
return true;
}
});
}
}
③ 測驗效果
由于是新建的一個活動視窗來測驗的,所以需要先更改一下清單檔案,如下,


四、補充
1、Toast(吐司)的基本使用
2、GestureOverlayView屬性
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/250713.html
標籤:其他
