2014-02-03 2 views
0

У меня есть Viewpager и у меня есть horizantalscrollview внутри viewpager.Horizantalscrollview содержит 2 макета. Моя цель horizantalscrollview отключена, когда я нажимаю кнопку, она прокручивается вправо. Я сделал это, но моя проблема viewpager не работает правильно.HorizantalScrollView внутри Viewpager

Я попытался это:

public class CustomHorizontalScrollView extends HorizontalScrollView { 

private boolean canScroll = false; 
private scrollListener listener=null; 
public CustomHorizontalScrollView(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
} 

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

public CustomHorizontalScrollView(Context context, AttributeSet attrs, 
     int defStyle) { 
    super(context, attrs, defStyle); 
    // TODO Auto-generated constructor stub 
} 




@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    // TODO Auto-generated method stub 

    if (this.canScroll) { 
     return super.onTouchEvent(ev); 
    } else { 
     return false; 
    } 
} 
public void enableScroll() { 
    this.canScroll = true; 

} 

public void disableScroll() { 
    this.canScroll = false; 

} 
public void setListener(scrollListener listener) { 
    this.listener = listener; 
} 

} 

Я надеюсь, что я объяснил свою проблему хорошо. Спасибо за любую помощь.

ответ

0

Я думаю, причина, по которой ваш ViewPager не работает, потому что HorizontalListView потребляет все TouchEvents.

Хорошим способом справиться с этим является метод requestDisallowInterceptTouchEvent().

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    // TODO Auto-generated method stub 
    if (this.canScroll) { 
     // Disallow ViewPager to intercept touch events. 
     getParent().requestDisallowInterceptTouchEvent(true); 
     return super.onTouchEvent(ev); 
    } else { 
     // Allow ViewPager to intercept touch events. 
     getParent().requestDisallowInterceptTouchEvent(false); 
     return false; 
    } 
} 

UPDATE 2014-02-04

Ваша кнопка также потребляет TouchEvents. Я нахожу interesting discussion on google groups. Пожалуйста, прочитайте это, есть два возможных решения:

  • первый попробовать простой один и установить атрибут android:scrollHorizontally="false" вашей кнопки (вы также можете сделать это программно: setHorizontallyScrolling(false))
  • второй: вы должны переопределить onTouchEvent() и onInterceptTouchEvent вашего ViewPager.
+0

я постараюсь это и результат ответа спасибо за ответ – gokhan

+0

К сожалению, он не был working.Everthing similar.I есть кнопка внутри horizalscrollview есть, и Scrollview внутри viewpager.When начать draging над кнопкой моего ViewPager не было работать, но при запуске он работает. – gokhan

+0

Я обновил свой ответ. – owe

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