2013-10-01 4 views
0

J'ai mis en place la vue onglet Sherlock Action Bar.Maintenant, je veux glisser les onglets en utilisant le détecteur de geste.Mon onglet fonctionne parfaitement.Mais je veux tirer l'événement tabselected tout en balayant l'écran en utilisant le geste de liste.Ici est l'extrait de code.GestureDetector ne fonctionne pas

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 

} 

} 

Voici mes fichiers 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" /> 

Ici j'ai utilisé Voir MainView = (Voir) findViewById (R.id.test);

essai ici est l'id de la disposition relative que je suis en utilisant comme setContentView ..

est-il exact? Quelles sont les modifications que je devrais suivre pour réaliser l'événement tabselected tiré en utilisant gesturelistner?

S'il vous plaît aider !!

Répondre

3

J'ai trouvé le bug dans mon code..Needed pour mettre en œuvre onDown

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

Maintenant, le code est working.One doivent mettre en œuvre cette extension tout en SimpleOnGestureListener.

Questions connexes