Si lo desea, puede utilizar Android Support Package - http://developer.android.com/sdk/compatibility-library.html
Con poco esfuerzo se puede modificar la actividad para usar fragmentos para que sus pestañas puedan tener animaciones de transición al igual que la aplicación de YouTube. Aquí es un código de ejemplo de cómo implementarlo - http://developer.android.com/sdk/compatibility-library.html
Editar: Si no desea utilizar el paquete de soporte, tal vez esta aplicación le ayudará
MyGestureDetector clase privada se extiende 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);
}
}
y luego, en la pestaña modificada del oyente solo cargue la animación adecuada, ya que sabe cuál fue seleccionada antes del gesto, y la que estamos cambiando después.
@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;
}
};
También hay que coger el gesto reemplazando el onTouchListener contigo detector gesto personalizado (y tal vez representan el diferente densidad pantalla de la hora de determinar si un gesto es una acción de golpe)
Lo siento por la respuesta larga , pero espero que ayude :)
puede ser útil: http://www.techienjoy.com/android-tab-example.php – Nimit