Keypad.java
上传用户:xmjingguan
上传日期:2009-07-06
资源大小:2054k
文件大小:3k
源码类别:

android开发

开发平台:

Java

  1. /***
  2.  * Excerpted from "Hello, Android!",
  3.  * published by The Pragmatic Bookshelf.
  4.  * Copyrights apply to this code. It may not be used to create training material, 
  5.  * courses, books, articles, and the like. Contact us if you are in doubt.
  6.  * We make no guarantees that this code is fit for any purpose. 
  7.  * Visit http://www.pragmaticprogrammer.com/titles/eband for more book information.
  8. ***/
  9. package org.example.sudoku;
  10. import android.app.Dialog;
  11. import android.content.Context;
  12. import android.os.Bundle;
  13. import android.view.KeyEvent;
  14. import android.view.View;
  15. public class Keypad extends Dialog {
  16.    protected static final String TAG = "Sudoku";
  17.    private final View keys[] = new View[9];
  18.    private View keypad;
  19.    private final int useds[];
  20.    private final PuzzleView puzzleView;
  21.    public Keypad(Context context, int useds[], PuzzleView puzzleView) {
  22.       super(context);
  23.       this.useds = useds;
  24.       this.puzzleView = puzzleView;
  25.    }
  26.    @Override
  27.    protected void onCreate(Bundle savedInstanceState) {
  28.       super.onCreate(savedInstanceState);
  29.       setTitle(R.string.keypad_title);
  30.       setContentView(R.layout.keypad);
  31.       findViews();
  32.       for (int element : useds) {
  33.          if (element != 0)
  34.             keys[element - 1].setVisibility(View.INVISIBLE);
  35.       }
  36.       setListeners();
  37.    }
  38.    @Override
  39.    public boolean onKeyDown(int keyCode, KeyEvent event) {
  40.       int tile = 0;
  41.       switch (keyCode) {
  42.       case KeyEvent.KEYCODE_0:
  43.       case KeyEvent.KEYCODE_SPACE: tile = 0; break;
  44.       case KeyEvent.KEYCODE_1:     tile = 1; break;
  45.       case KeyEvent.KEYCODE_2:     tile = 2; break;
  46.       case KeyEvent.KEYCODE_3:     tile = 3; break;
  47.       case KeyEvent.KEYCODE_4:     tile = 4; break;
  48.       case KeyEvent.KEYCODE_5:     tile = 5; break;
  49.       case KeyEvent.KEYCODE_6:     tile = 6; break;
  50.       case KeyEvent.KEYCODE_7:     tile = 7; break;
  51.       case KeyEvent.KEYCODE_8:     tile = 8; break;
  52.       case KeyEvent.KEYCODE_9:     tile = 9; break;
  53.       default:
  54.          return super.onKeyDown(keyCode, event);
  55.       }
  56.       if (isValid(tile)) {
  57.          returnResult(tile);
  58.       }
  59.       return true;
  60.    }
  61.    /** Return the chosen tile to the caller */
  62.    private void returnResult(int tile) {
  63.       puzzleView.setSelectedTile(tile);
  64.       dismiss();
  65.    }
  66.    private boolean isValid(int tile) {
  67.       for (int t : useds) {
  68.          if (tile == t)
  69.             return false;
  70.       }
  71.       return true;
  72.    }
  73.    private void findViews() {
  74.       keypad = findViewById(R.id.keypad);
  75.       keys[0] = findViewById(R.id.keypad_1);
  76.       keys[1] = findViewById(R.id.keypad_2);
  77.       keys[2] = findViewById(R.id.keypad_3);
  78.       keys[3] = findViewById(R.id.keypad_4);
  79.       keys[4] = findViewById(R.id.keypad_5);
  80.       keys[5] = findViewById(R.id.keypad_6);
  81.       keys[6] = findViewById(R.id.keypad_7);
  82.       keys[7] = findViewById(R.id.keypad_8);
  83.       keys[8] = findViewById(R.id.keypad_9);
  84.    }
  85.    private void setListeners() {
  86.       for (int i = 0; i < keys.length; i++) {
  87.          final int t = i + 1;
  88.          keys[i].setOnClickListener(new View.OnClickListener(){
  89.             public void onClick(View v) {
  90.                returnResult(t);
  91.             }});
  92.       }
  93.       keypad.setOnClickListener(new View.OnClickListener(){
  94.          public void onClick(View v) {
  95.             returnResult(0);
  96.          }});
  97.    }
  98. }