Событие Motion Event Capturing in android

92
12

Я написал код для приложения.

Макет приложения выглядит следующим образом.

0 1 2 3 4

5 6 7 8 9

теперь, когда пользователь касается одной клавиши (пользователь держит палец на кнопке 5), ее текст следует ввести в текстовое поле как "5 вниз". Но когда пользователь отпускает ключ, тогда текст должен быть установлен на "5 вверх". но перед тем, как сделать ключ, если пользователь скользит по макету пальцем до 6, тогда он должен быть обнаружен, а текст должен быть установлен на "вниз 6". он должен действовать так, но когда пользователь отпускает ключ, тогда текст должен быть установлен на "вверх по нажатой клавише ". Я использовал MOTION_UP, MOTION_DOWN, MOTION_MOVE, но я не понимаю, как это сделать. пожалуйста, бросьте мне немного света по этому вопросу. что происходит, когда я сдвигаюсь с 5 до 6, событие все еще находится в "вниз 5", но когда я снимаю палец, он устанавливает "вверх по 5". но я хочу, чтобы скользящий подход выполнялся. поэтому, пожалуйста, дайте мне некоторое представление о том, как это сделать.

вот мой код

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// select_btn = (Button) findViewById(R.id.ok);
// home_btn = (Button) findViewById(R.id.home);
et = (EditText) findViewById(R.id.entry);
et.setText("", TextView.BufferType.EDITABLE);
b = new Bundle();

try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

for (int i = 0; i < mybtn.length; i++) {
String btnid = "btn" + i;
int resid = getResources().getIdentifier(btnid, "id",
getPackageName());
mybtn[i] = (Button) findViewById(resid);
mybtn[i].setOnTouchListener(this);

}

}

@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
String s = null;
s = ((Button) v).getText().toString().trim();
switch (event.getAction()) {
// case MotionEvent.ACTION_MOVE:
// Do some stuff
// et.setText("move android"+s, TextView.BufferType.EDITABLE );
// break;

case MotionEvent.ACTION_DOWN:
et.setText("down android" + s, TextView.BufferType.EDITABLE);
// Do some stuff
break;
case MotionEvent.ACTION_UP:
et.setText("up android" + s, TextView.BufferType.EDITABLE);

}
return true;
}

спросил(а) 2012-02-17T17:01:00+04:00 8 лет, 8 месяцев назад
1
Решение
92

Я не тестировал его, но думаю, он должен работать:

private int currentSelected = 0;

@Override
public boolean onTouch(View v, MotionEvent event)
{
String s = null;

s = ((Button) v).getText().toString().trim();

switch (event.getAction())
{

case MotionEvent.ACTION_DOWN:

currentSelected = Integer.valueOf(s);
et.setText("down android" + s, TextView.BufferType.EDITABLE);
break;

case MotionEvent.ACTION_UP:
et.setText("up android" + currentSelected, TextView.BufferType.EDITABLE);
break;

case MotionEvent.ACTION_MOVE:
if (Integer.valueOf(s) != currentSelected)
{
et.setText("down android" + s, TextView.BufferType.EDITABLE);
currentSelected = Integer.valueOf(s);
}
break;

}
return true;
}

ответил(а) 2012-02-17T18:45:00+04:00 8 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема