Ответ 1
Не понятно, понимаете ли вы, как создать пользовательскую клавиатуру или нет. Если вы этого не сделаете, здесь - небольшой загружаемый проект, который создает пользовательскую цифровую клавиатуру. Для класса CustomKeyboardView или собственного класса клавиатуры добавьте следующий метод. Он переопределяет метод onDraw() и рисует фон ключа, определенного кодом 7 (в данном случае "0" ) красного цвета, а все остальные клавиши - синим.
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
List<Key> keys = getKeyboard().getKeys();
for (Key key : keys) {
if (key.codes[0] == 7) {
Log.e("KEY", "Drawing key with code " + key.codes[0]);
Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.red_tint);
dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
dr.draw(canvas);
} else {
Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.blue_tint);
dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
dr.draw(canvas);
}
}
}
В этом случае я не использовал 9-патч-изображения, а просто прост 50% прозрачных квадратных изображений и получил эффект, когда существующие кнопки просто тонированы цветами, которые я хотел. Чтобы получить более индивидуальный результат, я мог бы сделать мои рисунки 9-патч-изображениями и сделать следующее. Обратите внимание, что два ключа с значками не отображаются правильно, потому что они не определены как 9-патч-изображения, и я не предпринимал никаких особых усилий, чтобы сделать их масштабируемыми для этого примера. Я также не рассматривал использование разных изображений/эффектов для различных состояний для ключей; другие показали, как это сделать.
@Override
public void onDraw(Canvas canvas) {
// super.onDraw(canvas);
List<Key> keys = getKeyboard().getKeys();
for (Key key : keys) {
if (key.codes[0] == 7) {
NinePatchDrawable npd
= (NinePatchDrawable) context.getResources().getDrawable(R.drawable.red_key);
npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
npd.draw(canvas);
} else {
NinePatchDrawable npd
= (NinePatchDrawable) context.getResources().getDrawable(R.drawable.blue_key);
npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
npd.draw(canvas);
}
Paint paint = new Paint();
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(48);
paint.setColor(Color.GRAY);
if (key.label != null) {
canvas.drawText(key.label.toString(), key.x + (key.width / 2),
key.y + (key.height / 2), paint);
} else {
key.icon.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
key.icon.draw(canvas);
}
}
}