在自定义键盘上触摸事件

时间:2011-01-29 14:27:24

标签: android keyboard

我已经创建了自己的自定义键盘。

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

我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

假设您只是将“自定义”键盘绘制到Canvas上。显然使用内置键盘更好。但是,如果你真的想自己做,这是一个解决方案。

绘制键盘的每个字符,在绘制时将其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',' ', '<','#'}; 

在'draw'方法的某个地方:

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

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

答案 1 :(得分:0)

我认为你需要像this post这样的东西。