2012-05-08 2 views
3

У меня есть изображение, где мне нужно иметь как длинные нажатия (для контекстного меню), так и обычные рабочие прессы. Я могу заставить кого-то работать, но не обоих. Что я упустил? Код ниже работает только для обычных прессов. Как только я коснусь экрана, он начинает выполнение кода onTouch.android imageview длинное нажатие и регулярное нажатие

ImageView image = (ImageView)findViewById(R.id.visible_image); 
image.setLongClickable(true); 
image.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent ev) { 
     switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      // disable the screen taps for 500ms 
      DecodeActionDownEvent(v, ev, bm2); 
     case MotionEvent.ACTION_MOVE: 
     case MotionEvent.ACTION_UP: 
    } 
     return true; 
    } 
}); 
registerForContextMenu(image); 

...

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
    ContextMenuInfo menuInfo) { 
    menu.setHeaderTitle("Edit"); 
    ArrayList<String> menuItems = new ArrayList<String>(); 
    menuItems.add("Edit page settings"); 
    menuItems.add("Edit page objects"); 
    menuItems.add("Edit this object"); 
    for (int i = 0; i<menuItems.size(); i++) { 
     menu.add(Menu.NONE, i, i, menuItems.get(i)); 
    } 
} 

ответ

17

Вы можете попробовать сделать это следующим образом:

ImageView imageView = (ImageView) findViewById(R.id.ImageView); 
imageView.setOnLongClickListener(new OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View v) { 
        //your stuff 
     return true; 
    } 
}); 
imageView.setOnClickListener(new OnClickListener() { 
    @Override 
    public boolean onClick(View v) { 
     //your stuff 
     return true; 
    } 
}); 
+0

ОК, я не пробовал, и похоже, что это сработает. Можете ли вы рассказать мне, как получить координаты x и y с щелчком/длинным кликом из переданного в View v? – MrGibbage

+0

Ничего, я понял. Мне все еще нужно держать слушателя OnTouch. Спасибо :) – MrGibbage

2

Чтобы получить координаты х и у, установить сенсорную слушателя

 ImageView.setOnTouchListener(new View.OnTouchListener() 
     { 
     public boolean onTouch(View v, MotionEvent event) 
     { 
      //And u can get x and y values like: 

      x = event.getX(); 
      y = event.getY() ; 
     } 
     } 
2

После долгих поисков и экспериментов это лучшее решение, которое у меня есть для достижения такого рода поведения:

//Define these variables at the beginning of your Activity or Fragment: 
private long then; 
private int longClickDuration = 5000; //for long click to trigger after 5 seconds 

... 

ImageView imageView = (ImageView) findViewById(R.id.visible_image); 
imageView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      then = (long) System.currentTimeMillis(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      if ((System.currentTimeMillis() - then) > longClickDuration) { 
      /* Implement long click behavior here */ 
      System.out.println("Long Click has happened!"); 
      return false; 
      } else { 
      /* Implement short click behavior here or do nothing */ 
      System.out.println("Short Click has happened..."); 
      return true; 
      } 
     } 
     return true; 
     } 
    }); 
+1

Я думаю, что клик имеет дополнительное условие: палец не должен переместиться слишком сильно (например, с помощью салфетки). Так что держать thenX и тогда тоже может быть хорошей идеей здесь ... –

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