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.    // ...
  39.    
  40.    
  41.    @Override
  42.    public boolean onKeyDown(int keyCode, KeyEvent event) {
  43.       int tile = 0;
  44.       switch (keyCode) {
  45.       case KeyEvent.KEYCODE_0:
  46.       case KeyEvent.KEYCODE_SPACE: tile = 0; break;
  47.       case KeyEvent.KEYCODE_1:     tile = 1; break;
  48.       case KeyEvent.KEYCODE_2:     tile = 2; break;
  49.       case KeyEvent.KEYCODE_3:     tile = 3; break;
  50.       case KeyEvent.KEYCODE_4:     tile = 4; break;
  51.       case KeyEvent.KEYCODE_5:     tile = 5; break;
  52.       case KeyEvent.KEYCODE_6:     tile = 6; break;
  53.       case KeyEvent.KEYCODE_7:     tile = 7; break;
  54.       case KeyEvent.KEYCODE_8:     tile = 8; break;
  55.       case KeyEvent.KEYCODE_9:     tile = 9; break;
  56.       default:
  57.          return super.onKeyDown(keyCode, event);
  58.       }
  59.       if (isValid(tile)) {
  60.          returnResult(tile);
  61.       }
  62.       return true;
  63.    }
  64.    
  65.    
  66.    /** Return the chosen tile to the caller */
  67.    private void returnResult(int tile) {
  68.       puzzleView.setSelectedTile(tile);
  69.       dismiss();
  70.    }
  71.    
  72.    
  73.    private boolean isValid(int tile) {
  74.       for (int t : useds) {
  75.          if (tile == t)
  76.             return false;
  77.       }
  78.       return true;
  79.    }
  80.    
  81.    
  82.    private void findViews() {
  83.       keypad = findViewById(R.id.keypad);
  84.       keys[0] = findViewById(R.id.keypad_1);
  85.       keys[1] = findViewById(R.id.keypad_2);
  86.       keys[2] = findViewById(R.id.keypad_3);
  87.       keys[3] = findViewById(R.id.keypad_4);
  88.       keys[4] = findViewById(R.id.keypad_5);
  89.       keys[5] = findViewById(R.id.keypad_6);
  90.       keys[6] = findViewById(R.id.keypad_7);
  91.       keys[7] = findViewById(R.id.keypad_8);
  92.       keys[8] = findViewById(R.id.keypad_9);
  93.    }
  94.    
  95.    
  96.    private void setListeners() {
  97.       for (int i = 0; i < keys.length; i++) {
  98.          final int t = i + 1;
  99.          keys[i].setOnClickListener(new View.OnClickListener(){
  100.             public void onClick(View v) {
  101.                returnResult(t);
  102.             }});
  103.       }
  104.       keypad.setOnClickListener(new View.OnClickListener(){
  105.          public void onClick(View v) {
  106.             returnResult(0);
  107.          }});
  108.    }
  109.    
  110.    
  111. }