2011-01-29 9 views
2

自分でカスタマイズしたキーボードを作成しました。カスタムキーボードのタッチイベント

私が&をクリックすると、指の動きに合わせてキーが強調表示されます。私が指を持ち上げると、対応する手紙がEditTextに印刷されなければなりません。

どうすればいいですか?

+0

あなたはカスタマイズされたキーボードの手段をとっていますか? –

答えて

0

「カスタマイズされた」キーボードをキャンバスに描画すると仮定します。明らかに、組み込みのキーボードを使う方が良いです。しかし、あなたが本当にこれをやりたければ、ここでは解決策です。

キーボードの各文字を描画します。描画する際に各キーに対応する配列にx、yの位置を格納します。

//initialise 
int[] letterX = new int[29]; 
int[] letterY = new int[29]; 
char[] keyboardChar = {'Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M',' ', '<','#'}; 

どこか「引く」メソッドで:onTouchEventで

// first keyboard row (do this for each row moving adding to y for next row 
    x=10; y=50; keySpacing = 30; // starting x, y position 
    for (int charIndex = 0; charIndex < 10; charIndex++) { 
    letterX[charIndex] = x; 
    letterY[charIndex] = y; 
      textWidth = mPaint.measureText(keyboardChar, charIndex, 1); 
      if (!letterHit) { 
       canvas.drawText(keyboardChar, charIndex, 1, x - (textWidth/2), y, mPaint); 
      } else { 
       // this key is being pressed so draw highlighted somehow      
       canvas.drawText(keyboardChar, charIndex, 1, x - (textWidth/2), y,mPaint); 
      } 
      x += keySpacing; 
    } 

、letterX、letterYのあなたの配列に、X、Yのタッチ位置を比較し、キーが押されている場合、これはあなたを教えてくれます。配列インデックスは、それがどの文字かを示します。押されている場合はハイライトされたキーを印刷するためにdrawメソッドにコードが必要です(例:16pxの許容値を想定しています)。

   for (int j=0; j < 29; j++) { 
        if ((Math.abs(touchX - letterX[j]) < 16) && (Math.abs(touchY - letterY[j]) < 16) && !keyboardLock) { 
         letterHit = j; 
        } 
       } 

さらにロジックを(削除などのために)追加する必要があります。文字列を維持する必要があります。だから可能ならばシステムキーボードを使うのが最善です。

関連する問題