2013-10-01 44 views
0

我已经实现了Sherlock Action Bar选项卡视图。现在我想通过使用手势检测器来滑动选项卡。我的选项卡视图工作得很好。但是我想在使用手势列表扫描屏幕时触发tabselected事件。这里是代码片段。手势检测器不工作

package com.cdotsys.newsfeed; 





    public class HomeActivity extends SherlockFragmentActivity implements OnTouchListener,ActionBar.TabListener { 


ActionBar.Tab Tab1,Tab2; 



GestureDetector gestureDetector; 
View mainview; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 

    ActionBar actionBar = getSupportActionBar(); 

    Tab1 = getSupportActionBar().newTab(); 
    Tab2 = getSupportActionBar().newTab(); 

    gestureDetector = new GestureDetector(this, new MyGestureDetector()); 
    mainview = (View) findViewById(R.id.test); 
    mainview.setOnTouchListener(this); 
    // Hide Actionbar Icon 
    actionBar.setDisplayShowHomeEnabled(false); 

    // Hide Actionbar Title 
    actionBar.setDisplayShowTitleEnabled(false); 

    // Create Actionbar Tabs 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    // Set Tab Icon and Titles 
    Tab1.setText("Tab1"); 
    Tab2.setText("Tab2"); 

    // Set Tab Listeners 
    Tab1.setTabListener(this); 
    Tab2.setTabListener(this); 


    // Add tabs to actionbar 
    actionBar.addTab(Tab1); 
    actionBar.addTab(Tab2); 

} 

class MyGestureDetector extends SimpleOnGestureListener implements OnGestureListener { 
    private static final int SWIPE_MIN_DISTANCE = 120; 
    private static final int SWIPE_MAX_OFF_PATH = 250; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 


    @Override 
    public boolean onFling(final MotionEvent e1, final MotionEvent e2, final float velocityX, final float velocityY) { 
     if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { return false; } 

     /* positive value means right to left direction */ 
     final float distance = e1.getX() - e2.getX(); 
     final boolean enoughSpeed = Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY; 
     if(distance > SWIPE_MIN_DISTANCE && enoughSpeed) { 
      // right to left swipe 
      return true; 
     } else { 
      // oooou, it didn't qualify; do nothing 
      return false; 
     } 
    } 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    if (gestureDetector.onTouchEvent(event)){ 

     System.out.println("Working!!"); 
     return true; 

    } 

    return false; 

} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 
    Log.d("SimpleActionBarTabsActivity","tab " 
      + String.valueOf(tab.getPosition()) + " clicked"); 
} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 
    Log.d("SimpleActionBarTabsActivity","tab " 
      + String.valueOf(tab.getPosition()) + " un-clicked"); 
} 


@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 

} 

} 

这里是我的XML文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/test" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".HomeActivity" > 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello_world" /> 

在这里,我已经使用查看MAINVIEW =(查看)findViewById(R.id.test);

这里测试是我使用的是相对的setContentView布局的ID ..

它是正确的吗?我需要遵循什么样的修改才能实现使用gesturelistner触发的tab选定事件?

请帮忙!!

回答

3

我发现在我的code..Needed的bug实现onDown

@Override 
    public boolean onDown(MotionEvent e) 
    {    
    return true; 
    } 

现在的代码是working.One有同时扩大SimpleOnGestureListener来实现这一点。