2011-01-29 58 views
2

我已经创建了自己的自定义键盘。自定义键盘上的触摸事件

当我点击&拖动键盘时,应该根据我的手指移动来突出显示该键。当我抬起手指时,相应的字母必须打印在EditText上。

我该怎么做?

+0

sudhakar wht的定制键盘的手段?您已经查看或扩展了一些类? – 2011-01-31 11:49:11

回答

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',' ', '<','#'}; 

某处你的“画”的方法:

// 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; 
    } 

在的onTouchEvent,比较X,Y触摸位置决定你的letterX的阵列,这letterY会告诉你,如果按下一个键。数组索引告诉你它是哪个字符。你需要在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; 
        } 
       } 

你仍然需要更多的逻辑(删除等),你需要保持一个字符串。这就是为什么如果可能的话,最好使用系统键盘。