2013-04-28 1 views
0

Во-первых, я хотел бы извиниться за мой английский. Это не мой родной язык.Как обращаться с onItemClickListener и OnTOuchListener на том же элементе в GridView?

У меня есть простая галерея в Android. Изображения загружаются в GridView. У меня проблема с onItemClickListener и onTouchListener. Я установил onItemClickListener для GridView и onTouchListener для детей GridView (ImageViews). Когда я нажимаю на изображение, он должен отображаться в центре экрана телефона, и когда я нажимаю его, он должен увеличивать масштаб на том месте, где был мой палец, и когда я отпускаю палец, он должен уменьшать масштаб.

Проблема в том, что когда установлен onTouchListener, только он уволен. Я хотел бы узнать, когда я щелкнул, и когда я нажал.

Благодарим за помощь.

ответ

0

вы ищете проверки значения event.getAction() которая возвращает константу MotionEvent:

gridView.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       //Do something when user touch the screen 
       //(first touch event-before moving or releasing the finger) 
       break; 
      case MotionEvent.ACTION_UP: 
       //Do something when user release the finger touching the screen. 
       break; 
      } 
      return false; 
     } 
    }); 

Вы также ACTION_MOVE, которые существуют, когда пользователь пошевелить пальцем, прежде чем он отпустил его с экрана (хорошо для перетаскивания и т.д .. .)

EDIT:

проблемы с onTouch() является то, что она существует только для всего представления (сетка), и вы не имеете onItemTouch() , Одним из решений будет получение необходимой информации из элемента, когда onItemClick() происходит в определенной переменной класса (например, Bitmap изображения, на которое вы нажали), а затем используйте его для всего, что вам нужно в событии onTouch(). Помните в onTouch(), если ваше возвращение истинно в любой момент означает, что вы уже имели дело с сенсорным чехлом, а onClick() не произойдет. Также - при нажатии на кнопки ТОЛЬКО при отпускании пальца с экрана (означает MotionEvent.ACTION_UP), поэтому вы не будете иметь его на сенсорном событии.

Для этого необходимо либо использовать onItemLongClick(), либо установить onTouchListener для каждого элемента в сетке с помощью пользовательского адаптера (в getView()).

+0

Да, это работает, но как запустить onItemClick метод? Я должен выполнить два действия. Он похож на раскрывающееся меню на веб-сайтах - когда у меня есть указатель мыши над меню, это li: hover, а затем он виден, и когда я нажимаю какой-то один вариант меню, я перехожу на сайт, который был связан. Я хотел бы сделать некоторые аналогичные с Android и с изображениями. –

+0

Мой ответ слишком длинный для комментария, поэтому я отредактировал свой оригинальный ответ ... –

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

  • Нет связанных вопросов^_^