personalizado configchanges android android-layout android-fragments android-viewpager slidingdrawer

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



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.