2015-12-23 3 views
2

У меня есть следующий макет:Synchronizing ScrollView и NestedScrollView

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <android.support.v4.widget.NestedScrollView 
      android:id="@+id/nestedscrollview" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <LinearLayout 
       android:id="@+id/inner_container" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical"> 

       <NESTED VIEWS> 

      </LinearLayout> 
     </android.support.v4.widget.NestedScrollView> 

     <LinearLayout 
      android:id="@+id/outer_container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <OUTER VIEWS> 

     </LinearLayout> 
    </LinearLayout> 
</ScrollView> 

Мой вопрос заключается в том, что я хочу, чтобы ScrollView прокручивать первым, если все ScrollView переместилась малейшем немного, иначе NestedScrollView может потреблять трогают. В настоящее время NestedScrollView получает события касания и потребляет прокрутку только после того, как ScrollView получит прикосновение. Я пробовал использовать onInterceptTouchEvent и экспериментировал с ним, но безрезультатно. Любые указатели?

Это правильный подход или я использую какую-то другую комбинацию представлений? (? Раскладка координатор может быть)

ответ

1

Так что я продлил Scrollview и получил эту работу, как показано ниже:

private static final int SCROLL_THRESHOLD = 10; 

private boolean mScrolling; 

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    if (getScrollY() > SCROLL_THRESHOLD) { 
     mScrolling = true; 
     onTouchEvent(ev); 
     return false; 
    } else if (mScrolling) { 
     mScrolling = false; 
     return false; 
    } 
    if (ev.getActionMasked() == MotionEvent.ACTION_UP) { 
     mScrolling = false; 
    } 
    return super.onInterceptTouchEvent(ev); 
} 

работает для меня. Дайте мне знать, если у кого-то есть лучшее решение.

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