我已经创建了自己的自定义键盘。
当我点击&拖动键盘键应根据我的手指移动突出显示。当我抬起手指时,必须在EditText
上打印相应的字母。
我怎么能这样做?
答案 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这样的东西。