zrzhuang 2015-12-16 02:28 采纳率: 0%
浏览 1889

自定义View,用外部类定义OnKeyListener监听器,但是在AVD打不开,内部类的方式可以

public class MainActivity extends Activity {
private int speed = 10;
PlaneView planeView = new PlaneView(null);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //final PlaneView planeView = new PlaneView(this);
    setContentView(planeView);

    planeView.setBackgroundResource(R.drawable.back);

    WindowManager windowManager = getWindowManager();
    Display display = windowManager.getDefaultDisplay();
    DisplayMetrics metrics = new DisplayMetrics();

    display.getMetrics(metrics);

    planeView.currentX = metrics.widthPixels / 2;
    planeView.currentY = metrics.heightPixels - 400;
     onKeyListener listener = new onKeyListener();
    planeView.setOnKeyListener(listener);
    /******************外部类作为事件监听器*********************/
}
/******************外部类作为事件监听器*********************/
class onKeyListener implements OnKeyListener{

    /*private PlaneView plane;
    public onKeyListener(PlaneView planeView){
        this.plane = planeView;
    }*/
    @Override

    public boolean onKey(View source, int keycode, KeyEvent event) {
        // TODO Auto-generated method stub
        switch(event.getKeyCode()){
            case KeyEvent.KEYCODE_S:
                planeView.currentY += speed;
            break;
            case KeyEvent.KEYCODE_W:
                planeView.currentY -= speed;
            break;
            case KeyEvent.KEYCODE_A:
                planeView.currentX -= speed;
            break;
            case KeyEvent.KEYCODE_D:
                planeView.currentX += speed;
            break;
        }
        planeView.invalidate();
        return true;
    }
}
 这是自定义View

 public class PlaneView extends View{
    public float currentX;
    public float currentY;
    Bitmap plane;
    Paint p = new Paint();
    public PlaneView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        plane = BitmapFactory.decodeResource(context.getResources(), R.drawable.plane);
        setFocusable(true);
    }

    public void onDraw(Canvas canvas){
        super.onDraw(canvas);


        canvas.drawBitmap(plane, currentX, currentY, p);
    }
}
  • 写回答

1条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog