我有一個TabHost控件(不在操作欄中),我想讓用戶在每個選項卡上滑動上下文時(例如whatsapp emoji選項卡)更改選項卡。
我該怎麼做?滑動選項卡主機
編輯
感覺也很重要。我希望上下文應該有滾動動畫(無論用戶是否滑動或單擊了該選項卡)。
我有一個TabHost控件(不在操作欄中),我想讓用戶在每個選項卡上滑動上下文時(例如whatsapp emoji選項卡)更改選項卡。
我該怎麼做?滑動選項卡主機
編輯
感覺也很重要。我希望上下文應該有滾動動畫(無論用戶是否滑動或單擊了該選項卡)。
通過這個鏈接 http://thepseudocoder.wordpress.com/2011/10/13/android-tabs-viewpager-swipe-able-tabs-ftw/
您可以使用手勢檢測。
GestureDetector
檢測使用所提供的MotionEvents各種手勢和事件。當發生特定的運動事件時,GestureDetector.OnGestureListener回調將通知用戶。該類只能用於通過觸摸報告的MotionEvents(不要用於軌跡球事件)。要使用這個類:
1爲View在nTouchEvent(MotionEvent)方法創建GestureDetector的實例,確保您撥打
2的onTouchEvent(MotionEvent)。
http://smartandroidians.blogspot.in/2010/04/swipe-action-and-viewflipper-in-android.html
如果您已經創建了一個自定義活動和看法,那麼我建議是這樣的:
實施OnGestureListener
接口在當前的活動,並覆蓋onfling
方法。
執行完全取決於你。
但它的感覺不一樣。如果我點擊一個標籤,它不會爲動畫滾動。我怎樣才能以正確的方式做到這一點。我在android開發新。 – nrofis 2013-04-04 07:41:30
您可以覆蓋的onTouchEvent:
@Override
public boolean onTouchEvent(MotionEvent touchevent) {
switch (touchevent.getAction()) {
// when user first touches the screen to swap
case MotionEvent.ACTION_DOWN: {
lastX = touchevent.getX();
break;
}
case MotionEvent.ACTION_UP: {
float currentX = touchevent.getX();
// if left to right swipe on screen
if (lastX < currentX) {
switchTabs(false);
}
// if right to left swipe on screen
if (lastX > currentX) {
switchTabs(true);
}
break;
}
}
return false;
}
在回調中定義的方法將在事件發生
這個頁面展示如何使用GestureDetector承認輕掃手勢來執行
switchTabs方法:
public void switchTabs(boolean direction) {
if (direction) // true = move left
{
if (tabHost.getCurrentTab() == 0)
tabHost.setCurrentTab(tabHost.getTabWidget().getTabCount() - 1);
else
tabHost.setCurrentTab(tabHost.getCurrentTab() - 1);
} else
// move right
{
if (tabHost.getCurrentTab() != (tabHost.getTabWidget()
.getTabCount() - 1))
tabHost.setCurrentTab(tabHost.getCurrentTab() + 1);
else
tabHost.setCurrentTab(0);
}
}
我用手勢探測器... 你的片段需要實現OnGestureListener。然後在onCreateView中初始化一個TabHost。
private FragmentTabHost mTabHost; // global in fragment
下面是一個代碼:
private GestureDetectorCompat gDetector; // global in fragment
在onCreateView
gDetector = new GestureDetectorCompat(getActivity(), new OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.i("motion", "onFling has been called!");
final int SWIPE_MIN_DISTANCE = 120;
final int SWIPE_MAX_OFF_PATH = 250;
final int SWIPE_THRESHOLD_VELOCITY = 200;
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i("motion", "Right to Left");
switchTabs(false);
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i("motion", "Left to Right");
switchTabs(true);
}
} catch (Exception e) {
// nothing
}
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
});
mTabHost.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gDetector.onTouchEvent(event);
}
});
方法switchTabs(布爾方向)
public void switchTabs(boolean direction) {
Log.w("switch Tabs", "idemo direction");
if (direction) // true = move left
{
if (mTabHost.getCurrentTab() != 0)
mTabHost.setCurrentTab(mTabHost.getCurrentTab() - 1);
} else
// move right
{
if (mTabHost.getCurrentTab() != (mTabHost.getTabWidget()
.getTabCount() - 1))
mTabHost.setCurrentTab(mTabHost.getCurrentTab() + 1);
}
}
希望它可以幫助...
http://androidexample.com/Swipe_screen_left__right__top_bottom/index.php?view=article_discription&aid=95&aaid=118 – 2016-04-15 01:28:03