目录
安卓常用事件介绍
具体例子:
安卓常用事件介绍
1、单击事件
当用户触碰到某个组件或者方向键被按下时产生该事件,该事件的监听器View.OnClickListener
,事件处理方法是onClick()
。
2、焦点事件
组件得到或者失去焦点时产生该事件,监听器是View.OnFocusChangeListener,事件处理方法是onFocusChange()。
3、按键事件
用户按下或者释放手机键盘上的某个按键时产生,监听器是View.OnKeyListener, 事件处理方法是onKey()。
4、触碰事件
手机上具有触屏功能时,触碰屏幕产生该事件,监听器是View.OnTouchListener
,事件处理方法是onTouch()
。
二、安卓事件处理方式
1、基于回调的事件处理机制
基于回调的事件处理方式,在Activity生命周期那部分已经涉及到了七个回调方法。 (onCreate - onDestroy, onStart - onStop, onResume - onPause, onRestart )
具体例子:
新建一个安卓应用,并导入一张背景图片和图像
将默认的约束布局改成线性布局,设置相关属性
具体代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/img01"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv_mickey"
android:layout_width="100dp"
android:layout_height="120dp"
android:scaleType="fitXY"
android:src="@drawable/mickey"
/>
</LinearLayout>
打开strings 改变应用标题
具体代码:
<resources>
<string name="app_name">通过按键移动米老鼠</string>
</resources>
打开MainActivity实现主界面功能
实现代码:
具体代码:
package net.zyt.movemickeybykey;
import androidx.appcompat.app.AppCompatActivity;
import android.content.res.Resources;
import android.graphics.Point;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private final int STEP=10;//移动步长
private ImageView ivMickey;//米老鼠图像控件
private LinearLayout root;//线性根布局
private LinearLayout.LayoutParams layoutParams;//布局参数
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//利用布局资源文件设置用户界面
setContentView(R.layout.activity_main);
//通过资源标识符获取控件实例
ivMickey=findViewById(R.id.iv_mickey);
root=findViewById(R.id.root) ;
//线性根部局获得焦点
root.setFocusable(true);
root.requestFocus();
//获取图像控件的布局参数
layoutParams= (LinearLayout.LayoutParams) ivMickey.getLayoutParams();//(alt+enter)
//给线性根布局注册监听器,实现监听接口,编写事件处理方法
root.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//根据按键来修改米老鼠图形控件的布局参数-改变图像的位置
switch (keyCode){
case KeyEvent.KEYCODE_DPAD_UP://19,按的上方向健
// 上边界碰撞检测
if (ivMickey.getTop() >= 10) {
//判断米老鼠控件是否碰到上边界
layoutParams.topMargin = layoutParams.topMargin - STEP;
} else {
Toast.makeText(MainActivity.this, "温馨提示:碰到上边界~", Toast.LENGTH_SHORT).show();
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN://20,按的下方向健
// 下边界碰撞检测
if (ivMickey.getTop() <=1660) {
layoutParams.topMargin = layoutParams.topMargin + STEP;
} else {
Toast.makeText(MainActivity.this, "温馨提示:碰到下边界~", Toast.LENGTH_SHORT).show();
}
break;
case KeyEvent.KEYCODE_DPAD_LEFT://21,按的左方向健
// 左边界碰撞检测
if (ivMickey.getLeft() >=10) {
//判断米老鼠控件是否碰到左边界
layoutParams.leftMargin=layoutParams.leftMargin-STEP;
} else {
Toast.makeText(MainActivity.this, "碰到左边界~", Toast.LENGTH_SHORT).show();
}
break;
case KeyEvent.KEYCODE_DPAD_RIGHT://22,按的右方向健
Log.d("Mickey","ivMickey.getLeft():"+ivMickey.getLeft());
// 右边界碰撞检测
if (ivMickey.getLeft() <=800) {
layoutParams.leftMargin=layoutParams.leftMargin+STEP;
} else {
Toast.makeText(MainActivity.this, "碰到右边界~", Toast.LENGTH_SHORT).show();
}
break;
}
//重新设置米老鼠图像控件的布局参数,改变其位置
ivMickey.setLayoutParams(layoutParams);
return false;//事件要往后传播
}
});
}
}
运行效果: