MainAcitity.java文件 package com.example; import android.os.Bundle; 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; public class MainActivity extends AppCompatActivity { protected static 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.ivMickey); root = findViewById(R.id.root); //设置根布局可以获得焦点 root.setFocusable(true); //让根布局获得焦点 root.requestFocus(); //获取图像控件的布局参数 layoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams(); //给根布局注册监听器 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() <=root.getHeight()) { layoutParams.topMargin = layoutParams.topMargin + STEP; } else { Toast.makeText(MainActivity.this,"碰到下边界了",Toast.LENGTH_SHORT).show(); } break; case KeyEvent.KEYCODE_DPAD_LEFT://按左方向键 if (ivMickey.getLeft() >= 9) { layoutParams.leftMargin = layoutParams.leftMargin - STEP; }else { Toast.makeText(MainActivity.this,"碰到左边界了",Toast.LENGTH_SHORT).show(); } break; case KeyEvent.KEYCODE_DPAD_RIGHT://按右方向键 if(ivMickey.getRight() <= root.getWidth()) { layoutParams.leftMargin = layoutParams.leftMargin + STEP; } else { Toast.makeText(MainActivity.this,"碰到右边距了",Toast.LENGTH_SHORT).show(); } break; } //重新设置图像控件的布局参数 ivMickey.setLayoutParams(layoutParams); return false; } }); } }
activity_main.xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/root" android:background="@drawable/background" android:orientation="vertical" tools:context=".MainActivity"> <ImageView android:id="@+id/ivMickey" android:layout_width="100dp" android:layout_height="100dp" android:gravity="center" android:src="@drawable/mickey"/> </LinearLayout>