あなたが好きなら、あなたはAndroidのサポートパッケージを使用することができます - あなたがあなたの活動を変更することができます少しの努力でhttp://developer.android.com/sdk/compatibility-library.html
をフラグメントを使用して、YouTubeアプリのようにタブにトランジションアニメーションを付けることができます。ここ はそれを実装する方法のサンプルコードである - http://developer.android.com/sdk/compatibility-library.html
編集を:あなたはサポートパッケージを使用したくない場合は、多分この実装は
プライベートクラスMyGestureDetectorがSimpleOnGestureListener {
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;
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//get density
final DisplayMetrics metrics = getResources().getDisplayMetrics();
final float density = metrics.density;
//System.out.println(" in onFling() :: ");
//off path
if (Math.abs(e1.getY() - e2.getY()) > density*SWIPE_MAX_OFF_PATH)
return false;
//fling from right to left
if (e1.getX() - e2.getX() > density*SWIPE_MIN_DISTANCE && Math.abs(velocityX) > density*SWIPE_THRESHOLD_VELOCITY) {
//if the first tab is selected
if(currentSelection.equalsIgnoreCase(getString(R.string.tab_details_info))) {
//switch to second tab and save current selection
tabs.setCurrentTab(1);
currentSelection = tabs.getCurrentTabTag();
}
//if the second tab is selected
else if(currentSelection.equalsIgnoreCase(getString(R.string.tab_details_details))) {
//switch to second tab and save current selection
tabs.setCurrentTab(2);
currentSelection = tabs.getCurrentTabTag();
}
}
//fling from left to right
else if (e2.getX() - e1.getX() > density*SWIPE_MIN_DISTANCE && Math.abs(velocityX) > density*SWIPE_THRESHOLD_VELOCITY) {
//if the second tab is selected
if(currentSelection.equalsIgnoreCase(getString(R.string.tab_details_details))) {
//switch to second tab and save current selection
tabs.setCurrentTab(0);
currentSelection = tabs.getCurrentTabTag();
}
//if the third tab is selected
else if(currentSelection.equalsIgnoreCase(getString(R.string.tab_details_company))) {
//switch to second tab and save current selection
tabs.setCurrentTab(1);
currentSelection = tabs.getCurrentTabTag();
}
}
return super.onFling(e1, e2, velocityX, velocityY);
}
}
を拡張するのに役立ちます
あなたのタブが変更されたリスナーでは、ジェスチャーの前に選択されたアニメーションと後で切り替えるアニメーションが分かっているので、適切なアニメーションをロードするだけです。長い答えを
申し訳ありませんが(ジェスチャーがスワイプ動作であるかどうかを判断するときと異なる画面密度を占めるかもしれない)
@Override
public void onTabChanged(String tabId) {
//if the first tab is selected
if(currentSelection.equalsIgnoreCase(getResources().getString(R.string.tab_details_info))) {
//if we switch to second
if(tabId.equalsIgnoreCase(getResources().getString(R.string.tab_details_details))) {
linearInfo.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_left_out));
linearDetails.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_left_in));
linearCompany.setAnimation(null);
}
//if switch to third
else if(tabId.equalsIgnoreCase(getResources().getString(R.string.tab_details_company))) {
linearInfo.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_left_out));
linearDetails.setAnimation(null);
linearCompany.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_left_in));
}
}
//if the second tab is selected
else if(currentSelection.equalsIgnoreCase(getResources().getString(R.string.tab_details_details))) {
//if we switch to first
if(tabId.equalsIgnoreCase(getResources().getString(R.string.tab_details_info))) {
linearInfo.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_right_in));
linearDetails.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_right_out));
linearCompany.setAnimation(null);
}
//if switch to third
else if(tabId.equalsIgnoreCase(getResources().getString(R.string.tab_details_company))) {
linearInfo.setAnimation(null);
linearDetails.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_left_out));
linearCompany.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_left_in));
}
}
//if the third tab is selected
else if(currentSelection.equalsIgnoreCase(getResources().getString(R.string.tab_details_company))) {
//if we switch to first
if(tabId.equalsIgnoreCase(getResources().getString(R.string.tab_details_info))) {
linearInfo.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_right_in));
linearDetails.setAnimation(null);
linearCompany.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_right_out));
}
//if switch to second
else if(tabId.equalsIgnoreCase(getResources().getString(R.string.tab_details_details))) {
linearInfo.setAnimation(null);
linearDetails.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_right_in));
linearCompany.setAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_right_out));
}
}
currentSelection = tabId;
}
};
はまた、あなたはあなたとカスタムジェスチャー検出器をonTouchListenerをオーバーライドすることでジェスチャーをキャッチする必要がありますしかし、私はそれが助けてくれることを願っています:)
それが役に立つことがあります。http://www.techienjoy.com/android-tab-example.php – Nimit