2015-12-30 4 views
0

Как создать ViewPager, который обнаруживает события салфетки и щелчка?Как создать ViewPager, который обнаруживает события салфетки и щелчка

Я попытался создать собственный класс ViewPager, который переопределяет onInterceptTouchEvent, чтобы регистрировать события click и swipe (потому что я знаю, что они мешают друг другу), и вот что я застрял.

Как действовать?

public class CustomViewPager extends ViewPager { 

    public CustomViewPager(Context context) { 
     super(context); 
    } 

    public CustomViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public null onInterceptTouchEvent(MotionEvent ev) { 
     //Enter the code here to communicate a touch event 
     super.onInterceptTouchEvent(ev); 

    } 
} 
+0

Найден ответ [здесь] (http://stackoverflow.com/questions/16350987/viewpager-onitemclicklistener) –

ответ

0

Если вы не используете пользовательский сенсорный слушатель вы можете создать свой слушателя в содержание страницы с listerner по умолчанию (как found here) в пределах вашего адаптера.

что-то вроде этого:

@Override 
public Object instantiateItem(View collection, final int pos) { //have to make final so we can see it inside of onClick() 

    LayoutInflater inflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View page = inflater.inflate(R.layout.YOUR_PAGE, null); 

    page.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      //this will log the page number that was click 
      Log.i("TAG", "This page was clicked: " + pos); 
     } 
    }); 

    ((ViewPager) collection).addView(page, 0); 

    return page; 
} 
1

Если вы используете пользовательские сенсорный слушатель, как в примере в этом вопросе, трюк оправдательных кликов использует Жест детектор.

public class CustomViewPager extends ViewPager { 

    private GestureDetector mGesture; 

    public CustomViewPager(Context context) { 
     super(context); 
     init(); 
    } 

    public CustomViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    private void init() { 
     mGesture = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() { 

      @Override 
      public boolean onSingleTapConfirmed(MotionEvent e) { 
       //Handle your click here 
       return true; 
      } 

     }); 
    } 

    @Override 
    public null onInterceptTouchEvent(MotionEvent ev) { 
     if (!mGesture.onTouchEvent(event)) { 
      super.onInterceptTouchEvent(ev); 
     } 
    } 

} 
+0

Спасибо, но я уже связан с ответом на комментарии , –

+0

Нет ссылок на * * ответ в ваших комментариях. Это не значит, что этот подход не сработает. Если вы хотите, чтобы ваша ссылка была ответом, ответьте. Люди, просматривающие этот вопрос позже, будут искать принятый ответ, а не комментарии –

+0

Если бы я мог, я бы просто пометил свой вопрос как дубликат. Я отвечу. –

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