0

У меня есть расширенный вид из SurfaceView так:OnClickListener в MyCustomView, которая проходит SurfaceView

public class MyView extends SurfaceView implements View.OnClickListener { 

    public MyView(Context context) 
    { 
     super(context); 
     mContext = context; 
     setOnClickListener(this); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()){ 
     case DOWN OR UP OR MOVE: <-- I do something here like move and drag and drop and 
     // any related behavior to MyView 
    } 
    invalidate(); 

    return true; 
    } 

Теперь я реализовал OnClickListener и установить его в своем конструкторе.

OnClick метод:

@Override 
public void onClick(View v){ 
    Log.e("as", "clicked"); 
} 

Но метод OnClick никогда не называется. Как я могу это решить?

При замене return true;return super.onTouchEvent(event); мой метод onClick вызывается, но когда я хочу переместить свое пользовательское представление, метод onClick снова вызван, и это не моя порция.
Я хочу, только когда я постучал по своему пользовательскому виду, вызывается onClick, а когда он его не вызвал.

Спасибо заранее.

ответ

0

Проблема, вероятно, в вашем слушателе onTouch. Вы переопределяете и не имеете дело с возможностью onClick. Кроме того, вы потребляете событие с возвратом true, поэтому onClick никогда не будет вызван.

Помните, что onClick применяется в onTouchEvent, реализованном в исходном классе представления.

Вы можете проверить более подробную информацию по адресу:

http://developer.android.com/reference/android/view/View.html#onTouchEvent(android.view.MotionEvent)

, где вы можете прочитать:

общественное булево onTouchEvent (MotionEvent событие)

Добавлено в уровне API 1 Реализовать этот метод обработки сенсорного экрана события движения.

Если этот метод используется для обнаружения действий щелчка, рекомендуется, чтобы действия выполнялись путем реализации и вызова функции performClick(). Это обеспечит последовательное поведение системы, в том числе:

  • подчиняясь нажмите звуковые предпочтения диспетчерские OnClickListener называет
  • обработки ACTION_CLICK когда доступность функции включены
  • Параметры событий это событие движения.

Возвращает Истина, если событие было обработано, false в противном случае.

Поскольку вы хотите выбрать, когда будет выполнен щелчок, вы должны реализовать performClick (как указано в ссылке, на которую я ссылался).

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