Android Basic Learning Day10 |イベント処理

前面に書かれた言葉

1.主にステーションBの関連動画を参照してください。
2.内容に問題がある場合は、指摘または追加したいと思います。
3.コンテンツを統合します。

I.概要

イベント:グラフィカルインターフェイスでのユーザーの操作です。Android搭載の携帯電話とタブレットには、主に键盘事件和触摸事件2つのカテゴリがあります。キーボードイベントには、プレスダウン、ポップアップなどが含まれ、タッチイベントには、プレスダウン、ポップアップ、スライド、ダブルクリックなどが含まれます。

1.コールバックメカニズム(一般化)に基づくイベント処理:以降のメソッド。
2.リスナーインターフェイスメカニズムに基づくイベント処理(概要):リスナーで終了します。

2つ目は、キーボードイベントを処理する

(I.概要

1.イベントをクリックします

イベントリスナーはView.OnClickListenerであり、イベント処理メソッドはonClick()です。

2.キーイベント

これは、ユーザーが電話のキーボードのキーを押すか離すと生成され、リスナーはView.OnKeyListenerであり、イベント処理メソッドはonKey()です。

3.フォーカスイベント

このイベントは、コンポーネントがフォーカスを取得または失ったときに生成されます。リスナーはView.OnFocusChangeListenerであり、イベント処理メソッドはonFocusChange()です。

(2)テスト-包括的

①レイアウト
ここに写真の説明を挿入
②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);
        }
    }
}

③テスト効果
ここに写真の説明を挿入

3、タッチイベントを処理します

携帯電話にタッチスクリーン機能がある場合、イベントは画面に触れることで生成され、リスナーはView.OnTouchListenerであり、イベント処理メソッドはonTouch()です。

(1)テスト移動場所

①レイアウト
ここに写真の説明を挿入
②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;
            }
        });
    }
}

③テスト効果

これはテストする新しいアクティブウィンドウであるため、最初にマニフェストファイルを次のように変更する必要があります。
ここに写真の説明を挿入
ここに写真の説明を挿入

4、補足

1.トーストの基本的な使い方

2. GestureOverlayViewプロパティ

おすすめ

転載: blog.csdn.net/luck_ch09/article/details/112782069