自定义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);
    }
}

http://zhidao.baidu.com/link?url=t42QoTvQTS_Xn11eM0l1stu0Ba0dtQDfhtZVc4yam8GT0206JawPYBLBLJebBQ0g2L7sDrfTCoODYanztjwViq