android-setOnClickListener;

| 我一直在搞弄Snake示例代码,为了进行培训,我试图对其进行修改,并希望能加深对Android工作方式的理解。 到目前为止,我已经添加了两个按钮+相应的setOnClickListener代码,如下所示。 snake_layout.xml:
          <Button
         android:layout_height=\"39px\"
         android:layout_width=\"55px\" 
         android:layout_marginLeft=\"15px\"
         android:text=\"Left\"
         android:id=\"@+id/left_button\" />

      <Button
         android:layout_height=\"39px\" 
         android:layout_width=\"55px\" 
         android:layout_marginLeft=\"240px\"
         android:text=\"Right\"
         android:id=\"@+id/right_button\" />
和Snake.java:
.
.
.
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // No Title bar
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.snake_layout);

    final Button leftButton = (Button) findViewById(R.id.left_button);
    leftButton.setOnClickListener(new Button.OnClickListener() {  
        public void onClick(View v)
            {
                //perform action
            }
         });

    final Button rightButton = (Button) findViewById(R.id.right_button);
    rightButton.setOnClickListener(new Button.OnClickListener() {  
        public void onClick(View v)
            {
                //perform action
            }
         });
.
.
.
当我尝试一个简单的方法(例如\“ finish()\”)时,这两个按钮都会显示它们应该在的位置并可以工作。 现在,我想做的就是让这些按钮触发下面的代码, 在SnakeView.java中:
        if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
        if (mDirection != EAST) {
            mNextDirection = WEST;
        }
        return (true);
    }

    if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
        if (mDirection != WEST) {
            mNextDirection = EAST;
        }
        return (true);
    }
为了清楚起见,我需要让我的自定义屏幕按钮执行与当前代码中的“ KEYCODE_DPAD_RIGHT \”和“ KEYCODE_DPAD_LEFT \”相同的工作。 我的Xperia X10i没有DPAD,这是它的一部分;-P 我真的很感谢在正确方向上的一些指导。您可能已经猜到我对此很陌生。 在此先感谢大家     
已邀请:
在这里检查: 以编程方式抛出/模拟按键 基本逻辑隐藏在后面:
private void doInjectKeyEvent(KeyEvent kEvent) {
    try {
        /* Inject the KeyEvent to the Window-Manager. */
        windowManager.injectKeyEvent(kEvent.isDown(), kEvent.getKeyCode(),
            kEvent.getRepeatCount(), kEvent.getDownTime(),
            kEvent.getEventTime(), true);
    } catch (DeadObjectException e) {
        e.printStackTrace();
    }
}
    
代替
onClick
方法中的
// perform action
,从现有代码中复制适当的正文(例如
if (mDirection != EAST) mNextDirection = WEST;
)。 顺便说一句,以像素为单位指定按钮尺寸被认为是较差的做法。这对于打算在像素密度和屏幕尺寸可能完全不同的设备上运行的代码而言效果不佳。最好让按钮根据它们所包含的内容自行调整大小。     
您需要在SnakeView.java中创建一个函数,以允许您更改mNextDirection。
public void setMNextDirection(int direction){
  //check if the direction is recognised
  if (direction == EAST || direction == WEST ) { 
    mNextDirection = direction;
  }
之后,您可以使用:
mSnakeView.setMNextDirection(mSnakeView.WEST);
    

要回复问题请先登录注册