2013-09-30 5 views
0

Я создаю свое первое приложение для Android, которое представляет собой простую игру. Я сделал это, расширив класс Activity и используя 2D-графику, чтобы рисовать на экране с помощью Canvas (для учебных целей).Получение пользовательского ввода в игру для Android

Теперь я хотел бы получить инициалы пользователя/игрока, и мне нужно что-то вроде компонента, чтобы прочитать его. Я мог бы пойти и нарисовать клавиатуру самостоятельно и связать сенсорным прослушивателям с ней/прочитать события касания, но я понял, что в Android уже есть что-то подобное, например, клавиатура программного обеспечения. Один из вариантов, о котором я думал, - использовать компонент EditText.

Могу ли я визуализировать программную клавиатуру или компонент EditText с помощью Canvas? EditText и KeyBoardView, похоже, имеют метод ничья (холст-холст). Правильно ли это будет? Как установить координаты для рисования компонента?

Если это сработает, макет и общий внешний вид, вероятно, не связаны с внешним видом игры, было бы правильное предположение? (что означает, что мне все равно нужно будет его реализовать самостоятельно?)

Заранее благодарим!

ответ

0

Использование клавиатуры программного обеспечения может нарушить внешний вид вашей игры. Тем не менее, если ваша игра является простого типа, вы можете просто поместить EditText на просмотре вашей деятельности как это:

FrameLayout layout = new FrameLayout(this); 

layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
EditText eTInitials = new EditText(this); 
eTInitials.setPadding(0, 0, 0, 5); //change to suit your game 
eTInitials.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM); //change to suit your game 
etInitials.setOnKeyListener(new OnKeyListener(){ [override onkeymethod here] }); //get player initials here 
layout.addView(yourView); 

layout.addView(eTInitials); 
setContentView(layout); 

Я помню, что спас мне высокий балл на 3D играх с помощью программной клавиатуры, так этот подход ISN» Это плохо.

Или, как вы сказали, вы можете реализовать его самостоятельно, создав собственный пользовательский растровый бит и прочитав события касания.

+0

Скорее всего, это сработает, я уверен. Я не могу заставить это работать, хотя из-за того, что моя игра содержит «экраны» или «взгляды» на своем, и мне нужно будет использовать EditText на одном из этих «экранов». Я получаю исключение, которое в основном бросается, потому что я пытаюсь извлечь из рабочего потока вместо потока пользовательского интерфейса. – user2832636

+0

В вашей деятельности просто установите видимость EditText на «go», создайте прослушиватель с помощью метода, который устанавливает его обратно в «visible», а затем вызывает его на тех «экранах», когда это необходимо. –

+0

Я вижу. Как насчет того, будет ли у меня десятки виджетов, которые я хотел бы использовать для разных целей? Мне нужно было бы создать их все в своей деятельности, установить видимость для Gone и использовать слушателей? Это кажется немного неуклюжим, так как я хотел бы, чтобы каждый класс отвечал за свои действия и не имел ни одного массивного класса, содержащего все переменные и т. Д. Если бы я делал это в openGL, я, вероятно, вообще не мог бы использовать виджеты , но я думаю, что моя проблема немного похожа. У меня есть «экран», который не нарисован нитью UI, что бы я подумал, что версия openGL тоже будет? – user2832636

Смежные вопросы