一.安卓的界面事件
1、单击事件
- 当用户触碰到某个组件或者方向键被按下时产生该事件,该事件的监听器是View.OnClickListener,事件处理方法是onClick()。
2、焦点事件
- 组件得到或者失去焦点时产生该事件,监听器是View.OnFocusChangeListener,事件处理方法是onFocusChange()。
3、按键事件
- 用户按下或者释放手机键盘上的某个按键时产生,监听器是View.OnKeyListener, 事件处理方法是onKey()。
4、触碰事件
- 手机上具有触屏功能时,触碰屏幕产生该事件,监听器是View.OnTouchListener,事件处理方法是onTouch()。
5.处理事件方式
(1)基于回调的七个方法
- onCreate
- onDestroy
- onStart
- onStop
- onResume
- onPause
- onRestar
(2)基于监听事件的处理机制
二.实训案例
(1)图片资源准备好
(2)主布局资源文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/ivMickey"
android:layout_width="100dp"
android:layout_height="120dp"
android:scaleType="fitXY"
android:src="@drawable/move" />
</LinearLayout>
(3)资源文件MainActivity.java
package net.yuanjing.keystroke;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import net.yuanjing.keystroke.R;
public class MainActivity extends AppCompatActivity {
protected static final int STEP = 10;
private ImageView ivMickey;
private LinearLayout root;
private LinearLayout.LayoutParams layoutParams;
private int screenWidth;
private int screenHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ivMickey = findViewById(R.id.ivMickey);
root = findViewById(R.id.root);
root.setFocusable(true);
root.requestFocus();
layoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams();
screenWidth = getWindowManager().getDefaultDisplay().getWidth();
screenHeight = getWindowManager().getDefaultDisplay().getHeight();
root.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
if (ivMickey.getTop() >= 10) {
layoutParams.topMargin = layoutParams.topMargin - STEP;
} else {
Toast.makeText(MainActivity.this, "碰到上边界~", Toast.LENGTH_SHORT).show();
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
if (ivMickey.getBottom() <= screenHeight - ivMickey.getHeight() / 2) {
layoutParams.topMargin = layoutParams.topMargin + STEP;
} else {
Toast.makeText(MainActivity.this, "碰到下边界~", Toast.LENGTH_SHORT).show();
}
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
layoutParams.leftMargin = layoutParams.leftMargin - STEP;
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
layoutParams.leftMargin = layoutParams.leftMargin + STEP;
break;
}
ivMickey.setLayoutParams(layoutParams);
return false;
}
});
}
}
(4)最终实现的效果