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選定事件?
請幫忙!!