安卓基礎學習 Day10 |事件處理

寫在前面的話

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屬性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章