#java #android
#Android #ontouchlistener
Вопрос:
Я новичок в Android, и я хочу знать, как определить вид при наведении курсора при перемещении пальца в разных представлениях. В качестве примера, если в моей активности есть 5 линейных описаний A, B, C, D, E, и если я перехожу с C на B, а затем на E, я хочу это определить. Пожалуйста, если кто-то знает, как это реализовать, вы можете привести мне пример.
Код, который я пробовал до сих пор..
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_HOVER_ENTER) {
switch (v.getId()) {
case R.id.linearLayoutA:
Log.d(getClass().getSimpleName(), "entered A");
break;
case R.id.linearLayoutB:
Log.d(getClass().getSimpleName(), "entered B");
break;
case R.id.linearLayoutC:
Log.d(getClass().getSimpleName(), "entered c");
break;
case R.id.linearLayoutD:
Log.d(getClass().getSimpleName(), "entered d");
break;
case R.id.linearLayoutE:
Log.d(getClass().getSimpleName(), "entered e");
break;
}
}
return true;
}
Спасибо.
Комментарии:
1. Пожалуйста, если кто-то знает, не могли бы вы рассказать мне о способе реализации?
Ответ №1:
Реализовать представление.OnTouchListener в вашей активности
получите прямоугольную область касания элемента, затем, если точки касания находятся внутри этой прямоугольной области, сделайте что-нибудь…
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
rect1 = new Rect(linearLayout1.getLeft(), linearLayout1.getTop(),
linearLayout1.getRight(), linearLayout1.getBottom());
rect2= new Rect(linearLayout2.getLeft(), linearLayout2.getTop(),
linearLayout2.getRight(), linearLayout2.getBottom());
}
/////////////////////////////
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == (MotionEvent.ACTION_DOWN|MotionEvent.ACTION_MOVE)) {
if (rect1.contains((int) event.getX(), (int) event.getY())) {
//do something when touch or moving on linearlayout1 area
} else if (rect2.contains((int) event.getX(), (int) event.getY())) {
//do something when touch or moving on linearlayout2 area
}
}
return true;
}