personalizado - android configchanges orientation
MenĂº como SKOUT y Deslizamiento de One View to Another por toque en Android (4)
Quiero implementar un menú deslizante como aplicaciones FB o G + y he encontrado algunos ejemplos de código de la demostración de menú de FB y https://github.com/jfeinstein10/SlidingMenu
Estos son buenos para empezar, pero necesito algo extra de ellos. Al igual que aquí, funciona solo al hacer clic en el botón del menú, pero también quiero moverlo con gestos. Quiero tener el comportamiento de que hay una vista central y al mover ese centro hacia la derecha, aparecerá una vista y al moverla hacia la izquierda, aparecerá el menú. Supongamos que hay tres vistas A, B, C y cuando deslizo C hacia la izquierda, aparece A y cuando deslizo C hacia la derecha, aparece B. C está en el medio de A y B.
La vista 1.Middle se mueve hacia la derecha
Mover hacia la derecha
2. Mueva la vista del medio hacia el lado izquierdo
Mover hacia la izquierda
Ahora mi pregunta es: ¿cuáles son las mejores prácticas para desarrollar puntos de vista como ese? He oído de alguien que debería usar fragmentos y también ver paginador. Entonces, ¿cómo puedo desarrollar esto? ¿Hay alguna implementación de muestra hecha por alguien? Cualquier ayuda y sugerencias son apreciadas.
Para referencia, consulte esta aplicación que utiliza este tipo de deslizamiento b / w vistas Skout aplicación
Hay un modo oficial ... útil y ligero (mediante el uso de v4 Support Library):
Crear un cajón de navegación:
La solución más simple puede ser usar android-undergarment , que tiene un bisel incorporado, basado en el proyecto README:
El usuario también podrá controlar el cajón deslizando el bisel desde el lado izquierdo de la pantalla para abrir el cajón y haciendo lo mismo desde la derecha para cerrarlo. Si desea evitar esta funcionalidad táctil, puede llamar a setDrawerEnabled (false).
Otra biblioteca de código abierto que he encontrado que ha sido muy buena es https://github.com/jfeinstein10/SlidingMenu . Debe adaptarse a sus necesidades, ya que puede abrir y cerrar el cajón haciendo clic en "Menú" y deslizando el bisel. Descubrí que integrar esto junto con una biblioteca de Actionbar como ActionBarSherlock o la biblioteca de android-actionbar de johannilsson es simplemente una cuestión de cambiar una o dos líneas de código en el proyecto de la biblioteca. El archivo Léame para la biblioteca SlidingMenu explica cómo integrar con la biblioteca ABSherlock.
Una cosa que vale la pena señalar es que el proyecto de ejemplo de SlidingMenu demuestra una serie de diferentes animaciones de apertura y cierre de cajón. Estas son algunas de las mejores animaciones que he visto para este estilo de menú / navegación.
Simplemente puede usar TranslateAnimation
en la vista que desea mover junto con una ventana emergente para fundido y otra ventana emergente para su menú. Lo he implementado en mi aplicación, y funciona como un encanto.
Código :
public class SlidingOptionsMenuActivity extends Activity {
/**
* Signifies that the menu is already visible
*/
boolean alreadyShowing = false;
/**
* Width of the current window
*/
private int windowWidth;
/**
* Height of the current window
*/
private int windowHeight;
/**
* Reference of the {@link PopupWindow} which dims the screen
*/
private PopupWindow fadePopup;
/**
* The translate animation
*/
private Animation ta;
/**
* The view which needs to be translated
*/
private RelativeLayout baseView;
/**
* Reference of the {@link LayoutInflater}
*/
LayoutInflater inflater;
/*
* (non-Javadoc)
*
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Display display = getWindowManager().getDefaultDisplay();
windowWidth = display.getWidth();
windowHeight = display.getHeight();
inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
findViewById(R.id.btnOptions).setOnClickListener(new OnClickListener() {
/*
* (non-Javadoc)
*
* @see android.view.View.OnClickListener#onClick(android.view.View)
*/
@Override
public void onClick(View v) {
if(!alreadyShowing){
alreadyShowing = true;
openSlidingMenu();
}
}
});
}
/**
* Fades the entire screen, gives a dim background
*/
private void showFadePopup() {
final View layout = inflater.inflate(R.layout.fadepopup, (ViewGroup) findViewById(R.id.fadePopup));
fadePopup = new PopupWindow(layout, windowWidth, windowHeight, false);
fadePopup.showAtLocation(layout, Gravity.NO_GRAVITY, 0, 0);
}
/**
* Opens the sliding Menu
*/
private void openSlidingMenu() {
showFadePopup();
// The amount of view which needs to be moved out. equivalent to the
// width of the menu
int width = (int) (windowWidth * 0.6f);
translateView((float) (width));
int height = LayoutParams.FILL_PARENT;
// creating a popup
final View layout = inflater.inflate(R.layout.option_popup_layout,(ViewGroup) findViewById(R.id.popup_element));
final PopupWindow optionsPopup = new PopupWindow(layout, width, height, true);
optionsPopup.setBackgroundDrawable(new PaintDrawable());
optionsPopup.showAtLocation(layout, Gravity.NO_GRAVITY, 0, 0);
optionsPopup.setOnDismissListener(new PopupWindow.OnDismissListener() {
public void onDismiss() {
//Removing the fade effect
fadePopup.dismiss();
//to clear the previous animation transition in
cleanUp();
//move the view out
translateView(0);
//to clear the latest animation transition out
cleanUp();
//resetting the variable
alreadyShowing = false;
}
});
}
/**
* This method is responsible for view translation. It applies a translation
* animation on the root view of the activity
*
* @param right The position to translate to
*/
private void translateView(float right) {
ta = new TranslateAnimation(0f, right, 0f, 0f);
ta.setDuration(300);
ta.setFillEnabled(true);
ta.setFillAfter(true);
baseView = (RelativeLayout) findViewById(R.id.baseView);
baseView.startAnimation(ta);
baseView.setVisibility(View.VISIBLE);
}
/**
* Basic cleanup to avoid memory issues. Not everything is release after
* animation, so to immediately release it doing it manually
*/
private void cleanUp(){
if (null != baseView) {
baseView.clearAnimation();
baseView = null;
}
if (null != ta) {
ta.cancel();
ta = null;
}
fadePopup = null;
}
} //END of Class
//END of file
Espero que esto ayude.