下面实例中是在一个Activity 中通过上下左右方向键来控制红色小方块的移动,未作边界检测
效果如下:
RectControlActivity.java
package cie.Rect; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; public class RectControlActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);//设置窗口没有标题 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示 setContentView(new RectControlView(this)); } }
RectControlView.java
package cie.Rect; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.KeyEvent; import android.view.View; public class RectControlView extends View { int left = 40; int top = 40; int width = 40; int height = 40; public RectControlView(Context context) { super(context); // TODO Auto-generated constructor stub setFocusable(true); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawRect(left, top, left+width, top+height, paint); postInvalidate(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub switch(keyCode) { case KeyEvent.KEYCODE_DPAD_UP: top = top - 10; break; case KeyEvent.KEYCODE_DPAD_DOWN: top = top + 10; break; case KeyEvent.KEYCODE_DPAD_LEFT: left = left - 10; break; case KeyEvent.KEYCODE_DPAD_RIGHT: left = left + 10; break; default: break; } return super.onKeyDown(keyCode, event); } }