Android: View.setClickable использует событие клика.

У меня есть собственное представление галереи для горизонтальной прокрутки и несколько дочерних представлений, все из которых должны быть кликабельными.

Параметр childview.setOnClickListener()не работает, так как он всегда использует событие касания.

Поэтому я использовал childview.setOnTouchListener()и позволил его методу onTouch вернуть false, чтобы Галерея стала прокручиваемой.

Все в порядке.

Теперь проблема в том, что метод onTouch в childView запускает только событие ACTION_DOWN. Он не передает MotionEvent ACTION_UP, если только я не сделаю View доступным для кликов, установив childview.setClickable(). Тем не менее, установка самого представления Viewable, по-видимому, потребляет событие onTouch, так что представление галереи становится непрокручиваемым.

Похоже, я хожу по кругу. Буду благодарен за любую помощь.

Вот мой код

Представление галереи:

public class myGallery extends Gallery {

    public myGallery(Context ctx, AttributeSet attrSet) {
        super(ctx, attrSet);
        // TODO Auto-generated constructor stub
    }

    private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2){ 
           return e2.getX() > e1.getX(); 
        }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){
      int kEvent;
      if(isScrollingLeft(e1, e2)){ //Check if scrolling left
        kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
      }else{ //Otherwise scrolling right
        kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
      }
      onKeyDown(kEvent, null);
      return true;  
    }
}

в моем действии:

gallery.setOnItemSelectedListener(new OnItemSelectedListener(){
     public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {


         //  childView.setClickable(true);   // can't use this
                                             // click event would get consumed
                                            // and gallery would not scroll 

         // therefore, I can only use the ACTION_DOWN event below:

         childView.setOnTouchListener(new OnTouchListener() {
              public boolean onTouch(View v, MotionEvent event) {

              switch (event.getAction()) {
                  case MotionEvent.ACTION_DOWN:
                       //doStuff();
              }

              return false;
              }
         });
    }

    public void onNothingSelected(AdapterView<?> arg0) {}
     });
}
6
задан Anirudh Sharma 27 October 2015 в 09:46
поделиться