Android emulator TouchPad的代码可以工作,但不适用于DPAD…请帮助我修复此问题 package org.coe.twoD; 导入android.app.Activity; 导入android.content.Context; 导入android.graphics.Canvas; 导入android.graphics.Color; 导入android.graphics.Paint//导入android.graphics.Path; 导入android.graphics.Rect//导入android.graphics.RectF; 导入android.os.Bundle//导入android.util.Log; 导入android.util.Log; 导入android.view.KeyEvent; 导入android.view.MotionEvent; 导入android.view.view; 导入android.view.view.OnClickListener; 公共类TwoD扩展活动实现OnClickListener{ /**在首次创建活动时调用*/ @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); View draw2d=findViewById(R.id.draw_按钮); draw2d.setOnClickListener(此); } 公共void onClick(视图v){ 如果(R.id.draw_按钮==v.getId()){ setContentView(新的draw2D(本)); } } 公共类draw2D扩展视图{ 私有静态最终字符串TAG=“数独”; 私有浮动宽度;//一个磁贴的宽度 私有浮动高度;//一个磁贴的高度 private int selX;//X选择的索引 private int selY;//选择的Y索引 private final Rect selRect=new Rect(); 公共绘图2D(上下文){ 超级(上下文); } @凌驾 已更改尺寸的受保护空心(整数w、整数h、整数oldw、整数oldh){ 宽度=w/9f; 高度=h/9f; getRect(selX,selY,selRect); Log.d(标签,“onSizeChanged:宽度“+宽度+”,高度“+高度); super.onSizeChanged(w,h,oldw,oldh); } @凌驾 受保护的void onDraw(画布){ //画背景。。。 绘制背景=新绘制(); setColor(getResources().getColor(R.color.background)); drawRect(0,0,getWidth(),getHeight(),background); //画黑板。。。 //定义网格线的颜色 深色油漆=新油漆(); setColor(getResources().getColor(R.color.dark)); Paint hilite=新的Paint(); setColor(getResources().getColor(R.color.hilite)); 油漆灯=新油漆(); setColor(getResources().getColor(R.color.light)); //绘制次要网格线 对于(int i=0;i

Android emulator TouchPad的代码可以工作,但不适用于DPAD…请帮助我修复此问题 package org.coe.twoD; 导入android.app.Activity; 导入android.content.Context; 导入android.graphics.Canvas; 导入android.graphics.Color; 导入android.graphics.Paint//导入android.graphics.Path; 导入android.graphics.Rect//导入android.graphics.RectF; 导入android.os.Bundle//导入android.util.Log; 导入android.util.Log; 导入android.view.KeyEvent; 导入android.view.MotionEvent; 导入android.view.view; 导入android.view.view.OnClickListener; 公共类TwoD扩展活动实现OnClickListener{ /**在首次创建活动时调用*/ @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); View draw2d=findViewById(R.id.draw_按钮); draw2d.setOnClickListener(此); } 公共void onClick(视图v){ 如果(R.id.draw_按钮==v.getId()){ setContentView(新的draw2D(本)); } } 公共类draw2D扩展视图{ 私有静态最终字符串TAG=“数独”; 私有浮动宽度;//一个磁贴的宽度 私有浮动高度;//一个磁贴的高度 private int selX;//X选择的索引 private int selY;//选择的Y索引 private final Rect selRect=new Rect(); 公共绘图2D(上下文){ 超级(上下文); } @凌驾 已更改尺寸的受保护空心(整数w、整数h、整数oldw、整数oldh){ 宽度=w/9f; 高度=h/9f; getRect(selX,selY,selRect); Log.d(标签,“onSizeChanged:宽度“+宽度+”,高度“+高度); super.onSizeChanged(w,h,oldw,oldh); } @凌驾 受保护的void onDraw(画布){ //画背景。。。 绘制背景=新绘制(); setColor(getResources().getColor(R.color.background)); drawRect(0,0,getWidth(),getHeight(),background); //画黑板。。。 //定义网格线的颜色 深色油漆=新油漆(); setColor(getResources().getColor(R.color.dark)); Paint hilite=新的Paint(); setColor(getResources().getColor(R.color.hilite)); 油漆灯=新油漆(); setColor(getResources().getColor(R.color.light)); //绘制次要网格线 对于(int i=0;i,android-emulator,Android Emulator,我忘了添加以下代码: this.requestFocus(); 此.setFocusableInTouchMode(true) 一旦我做到了这一点,休息就如我所料了 package org.coe.twoD; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graph

我忘了添加以下代码:

this.requestFocus(); 此.setFocusableInTouchMode(true)

一旦我做到了这一点,休息就如我所料了

package org.coe.twoD;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint; //import android.graphics.Path;
import android.graphics.Rect; //import android.graphics.RectF;
import android.os.Bundle; //import android.util.Log;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;

import android.view.View.OnClickListener;

public class TwoD extends Activity implements OnClickListener {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  View draw2d = findViewById(R.id.draw_button);
  draw2d.setOnClickListener(this);

 }

 public void onClick(View v) {

  if (R.id.draw_button == v.getId()) {

   setContentView(new draw2D(this));

  }
 }

 public class draw2D extends View {
  private static final String TAG = "Sudoku";

  private float width; // width of one tile
  private float height; // height of one tile
  private int selX; // X index of selection
  private int selY; // Y index of selection
  private final Rect selRect = new Rect();

  public draw2D(Context context) {
       super(context);

  }

  @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
   width = w / 9f;
   height = h / 9f;
   getRect(selX, selY, selRect);
   Log.d(TAG, "onSizeChanged: width " + width + ", height " + height);
   super.onSizeChanged(w, h, oldw, oldh);
  }

  @Override
  protected void onDraw(Canvas canvas) {
   // Draw the background...
   Paint background = new Paint();
   background.setColor(getResources().getColor(R.color.background));
   canvas.drawRect(0, 0, getWidth(), getHeight(), background);

   // Draw the board...

   // Define colors for the grid lines
   Paint dark = new Paint();
   dark.setColor(getResources().getColor(R.color.dark));

   Paint hilite = new Paint();
   hilite.setColor(getResources().getColor(R.color.hilite));

   Paint light = new Paint();
   light.setColor(getResources().getColor(R.color.light));

   // Draw the minor grid lines
   for (int i = 0; i < 9; i++) {
    canvas.drawLine(0, i * height, getWidth(), i * height, light);
    canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1,
      hilite);
    canvas.drawLine(i * width, 0, i * width, getHeight(), light);
    canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(),
      hilite);
   }

   // Draw the major grid lines
   for (int i = 0; i < 9; i++) {
    if (i % 3 != 0)
     continue;
    canvas.drawLine(0, i * height, getWidth(), i * height, dark);
    canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1,
      hilite);
    canvas.drawLine(i * width, 0, i * width, getHeight(), dark);
    canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(),
      hilite);
   }

   /*
    * dark.setColor(Color.MAGENTA); Path circle= new Path();
    * circle.addCircle(150, 150, 100, Path.Direction.CW);
    * canvas.drawPath(circle, dark);
    * 
    * 
    * Path rect=new Path();
    * 
    * RectF rectf= new RectF(150,200,250,300); rect.addRect(rectf,
    * Path.Direction.CW); canvas.drawPath(rect, dark);
    * 
    * 
    * canvas.drawRect(0, 0,250, 250, dark);
    * 
    * 
    * canvas.drawText("Hello", 200,200, dark);
    */
   Paint selected = new Paint();
   selected.setColor(Color.GREEN);
   canvas.drawRect(selRect, selected);

  }

  /*
   * public boolean onTouchEvent(MotionEvent event){
   * if(event.getAction()!=MotionEvent.ACTION_DOWN) return
   * super.onTouchEvent(event);
   * select((int)(event.getX()/width),(int)(event.getY()/height));
   * 
   * 
   * return true; }
   */

  private void select(int x, int y) {
   invalidate(selRect);
   selX = Math.min(Math.max(x, 0), 8);
   selY = Math.min(Math.max(y, 0), 8);
   getRect(selX, selY, selRect);
   invalidate(selRect);

  }
  @Override
  public boolean onKeyUp(int keyCode, KeyEvent event) {
   return super.onKeyUp(keyCode, event);
  }



 @Override
 public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() != MotionEvent.ACTION_DOWN)
       return super.onTouchEvent(event);

    select((int) (event.getX() / width),
          (int) (event.getY() / height));
   // game.showKeypadOrError(selX, selY);
    Log.d(TAG, "onTouchEvent: x " + selX + ", y " + selY);
    return true;
 }



 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
    Log.d(TAG, "onKeyDown: keycode=" + keyCode + ", event="
          + event);
    switch (keyCode) {
    case KeyEvent.KEYCODE_DPAD_UP:
       select(selX, selY - 1);
       break;
    case KeyEvent.KEYCODE_DPAD_DOWN:
       select(selX, selY + 1);
       break;
    case KeyEvent.KEYCODE_DPAD_LEFT:
       select(selX - 1, selY);
       break;
    case KeyEvent.KEYCODE_DPAD_RIGHT:
       select(selX + 1, selY);
       break;
      default:
       return super.onKeyDown(keyCode, event);
    }
    return true;
 }

  private void getRect(int x, int y, Rect rect) {
   rect.set((int) (x * width), (int) (y * height),
     (int) (x * width + width), (int) (y * height + height));
  }
 }

}