自定义控件(实现小飞机)

1.效果图:按A就往左移动,按W就往上移动,按S就往下移动,按D往右移动

2.planeView.java

 1 package com.example.app4;
 2 
 3 import android.content.Context;
 4 import android.graphics.Bitmap;
 5 import android.graphics.BitmapFactory;
 6 import android.graphics.Canvas;
 7 import android.graphics.Paint;
 8 import android.view.View;
 9 
10 /**
11  * Created by Administrator on 2018/5/16.
12  */
13 public class palneView extends View {
14     private Bitmap plane;
15     public float currentX;
16     public float currentY;
17 
18     public palneView(Context context) {
19         super(context);
20         plane = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane);
21         setFocusable(true);
22     }
23 
24     @Override
25     protected void onDraw(Canvas canvas) {
26         super.onDraw(canvas);
27         Paint paint = new Paint();
28         canvas.drawBitmap(plane,currentX,currentY,paint);
29     }
30 }

3.MainActivity.java

 1 package com.example.app4;
 2 
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.util.DisplayMetrics;
 6 import android.view.KeyEvent;
 7 import android.view.View;
 8 import android.view.Window;
 9 import android.view.WindowManager;
10 
11 public class MainActivity extends AppCompatActivity {
12     public palneView pv;
13     private int speed=10;
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         //去窗口标题
19         requestWindowFeature(Window.FEATURE_NO_TITLE);
20         //全屏
21         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
22         pv= new palneView(MainActivity.this);
23         setContentView(pv);
24         DisplayMetrics metrics = new DisplayMetrics();
25 
26         //初始位置
27         pv.currentX=metrics.widthPixels/2;
28         pv.currentY=metrics.heightPixels/2;
29 
30         pv.setOnKeyListener(new View.OnKeyListener() {
31             @Override
32             public boolean onKey(View v, int keyCode, KeyEvent event) {
33                 switch (event.getKeyCode()){
34                     case KeyEvent.KEYCODE_W:
35                         pv.currentY-=speed;
36                         break;
37                     case KeyEvent.KEYCODE_S:
38                         pv.currentY+=speed;
39                         break;
40                     case KeyEvent.KEYCODE_A:
41                         pv.currentX-=speed;
42                         break;
43                     case KeyEvent.KEYCODE_D:
44                         pv.currentX+=speed;
45                         break;
46 
47                 }
48                 pv.invalidate();
49                 return true;
50             }
51         });
52     }
53 }
原文地址:https://www.cnblogs.com/sunxiaoyan/p/9046527.html