效果图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b3cc0d342de244f9a2c665c5e7b7c149.gif)
话不多说 直接上源代码
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:id="@+id/root"
android:background="@mipmap/bg"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv_zj"
android:layout_width="100dp"
android:layout_height="120dp"
android:src="@mipmap/zj"
android:scaleType="fitXY"/>
</LinearLayout>
MainActivity.class
package net.example.key;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.LinearLayoutCompat;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private static final int step = 10;
private LinearLayout root;
private ImageView ivzj;
private LinearLayout.LayoutParams layoutParams;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ivzj = findViewById(R.id.iv_zj);
root =findViewById(R.id.root);
root.setFocusable(true);
root.requestFocus();
layoutParams = (LinearLayout.LayoutParams) ivzj.getLayoutParams();
root.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keycode, KeyEvent keyEvent) {
switch (keycode) {
case KeyEvent.KEYCODE_DPAD_UP:
if (ivzj.getTop() >= 10) {
layoutParams.topMargin = layoutParams.topMargin - step;
} else {
Toast.makeText(MainActivity.this,"碰到上边界" ,Toast.LENGTH_LONG).show();
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN://下方向键
if (ivzj.getBottom() >= 10) {
layoutParams.topMargin = layoutParams.topMargin + step;
} else {
Toast.makeText(MainActivity.this,"碰到下边界" ,Toast.LENGTH_LONG).show();
}
break;
case KeyEvent.KEYCODE_DPAD_LEFT://左方向键
if (ivzj.getLeft() >= 10) {
layoutParams.leftMargin = layoutParams.leftMargin - step;
} else {
Toast.makeText(MainActivity.this,"碰到左边界" ,Toast.LENGTH_LONG).show();
}
break;
case KeyEvent.KEYCODE_DPAD_RIGHT://按右方向键
if (ivzj.getRight() >= 10) {
layoutParams.leftMargin = layoutParams.leftMargin + step;
} else {
Toast.makeText(MainActivity.this,"碰到右边界" ,Toast.LENGTH_LONG).show();
}
break;
}
ivzj.setLayoutParams(layoutParams);
return false;
}
});
}
}
声明变量
![在这里插入图片描述](https://img-blog.csdnimg.cn/3816c0267ea14605b5da7913b6f4e209.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/79c4231f20a74c4190be30c7a602f529.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b6222da4e4664de7b585ea188d70f191.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6736e11e315d4d1ca66ee9ed343e7d41.png)