2012-06-19 83 views
0

我有一个布局,我有一个ScrollView和一些东西。它看起来像:如何禁用ScrollView

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/welcome_scrol_lay" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" 
    android:background="@drawable/bg"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:background="@drawable/bg" 
     android:weightSum="100" > 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="250dp" 
      android:orientation="vertical" 
      android:weightSum="100" 
      android:background="@drawable/specialmapholder"> 
      <android.support.v4.view.ViewPager 
       android:id="@+id/welcomeViewPager" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:layout_marginTop="15dp" 
       android:layout_marginLeft="15dp" 
       android:layout_marginRight="15dp" 
       android:layout_weight="90" 
       android:clickable="true" /> 
      <LinearLayout 
       android:id="@+id/welcome_indicatorLayout" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:layout_weight="10" 
       android:gravity="center" > 
      </LinearLayout> 
     </LinearLayout> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="50" 
      android:orientation="vertical"> 
      <TextView 
       android:id="@+id/welcome_header" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="15dp" 
       android:layout_marginLeft="20dp" 
       android:layout_marginRight="20dp" 
       android:text="Large Text" 
       android:textColor="@color/white" 
       android:textStyle="bold" 
       android:textSize="26dp" 
       android:textAppearance="?android:attr/textAppearanceLarge" /> 
      <TextView 
       android:id="@+id/welcome_body" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="20dp" 
       android:layout_marginRight="20dp" 
       android:text="Medium Text" 
       android:textColor="@color/white" 
       android:textSize="14dp" 
       android:textStyle="bold" 
       android:layout_marginTop="20dp" 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 
     </LinearLayout> 
    </LinearLayout> 
</ScrollView> 

正如你所看到的,我在ScrollView中有一个Viewpager。我想在触摸ViewPager时禁用滚动,因为当我想更改图片页面时会滚动。我如何在触摸ViewPager时禁用滚动功能?

回答

3

在Android中,家长可以消耗孩子的TouchEvents。在这种情况下,ScrollView消耗ViewPager组件的TouchEvents。为了避免这种行为,Android框架提供了onInterceptTouchEvent(MotionEvent)。

在你的情况,你必须继承ScrollView的子类并改变onInterceptTouchEvent(MotionEvent)方法。您应该更改onInterceptTouchEvent(MotionEvent),以便ScrollView仅在用户垂直滚动ScrollView时才使用该子项的事件。

的ListView的示例实现:

public class VerticalListView extends ListView { 

private float mLastX; 
private float mLastY; 
private float mDiffX; 
private float mDiffY; 

public VerticalListView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

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

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

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      // reset difference values 
      mDiffX = 0; 
      mDiffY = 0; 

      mLastX = ev.getX(); 
      mLastY = ev.getY(); 
      break; 

     case MotionEvent.ACTION_MOVE: 
      final float curX = ev.getX(); 
      final float curY = ev.getY(); 
      mDiffX += Math.abs(curX - mLastX); 
      mDiffY += Math.abs(curY - mLastY); 
      mLastX = curX; 
      mLastY = curY; 

      // don't intercept event, when user tries to scroll horizontally 
      if (mDiffX > mDiffY) { 
       return false; 
      } 
    } 

    return super.onInterceptTouchEvent(ev); 
} 

}

+0

谢谢。伟大工程:) – user1302569

+0

高兴,我可以帮助你:) – AZ13

+0

我没有得到在这一类方法onInterceptTouchEvent这与View类扩展..谁能帮助? – djk

0
// Get the ScrollView 
final ScrollView myScroll = (ScrollView) findViewById(R.id.welcome_scrol_lay); 


// Disable Scrolling by setting up an OnTouchListener to do nothing 
    myScroll.setOnTouchListener(new OnTouchListener(){ 

     public boolean onTouch(View v, MotionEvent event) { 
      return true; 
     } 
    }); 


// Enable Scrolling by removing the OnTouchListner 
    tvDisplayScroll.setOnTouchListener(null); ` 

但问题是,这可能完全禁用滚动效果

相关问题