web-dev-qa-db-fra.com

Android Diapositive de style Facebook

La nouvelle application Facebook et sa navigation est tellement cool. J'essayais simplement de voir comment cela pouvait être imité dans mon application.

Quelqu'un sait-il comment cela peut être réalisé?

enter image description here

En cliquant sur le bouton en haut à gauche, la diapositive de page s'affiche et l'écran suivant s'affiche:

enter image description here

Vidéo YouTube

281
Harsha M V

J'ai moi-même joué à cela, et le meilleur moyen que j'ai trouvé était d'utiliser un FrameLayout et de placer un HorizontalScrollView (HSV) personnalisé en haut du menu. À l'intérieur du HSV se trouvent les vues de votre application , mais , il existe une vue transparente en tant que premier enfant. Cela signifie que, lorsque le décalage de défilement du HSV est égal à zéro, le menu s'affiche (et reste cliquable de manière surprenante).

Lorsque l'application démarre, nous faisons défiler le HSV jusqu'au décalage de la première vue d'application visible, et lorsque nous voulons afficher le menu, nous revenons en arrière pour faire apparaître le menu à travers la vue transparente.

Le code est ici, et les deux boutons du bas (appelés HorzScrollWithListMenu et HorzScrollWithImageMenu) dans l'activité Lancer affichent les meilleurs menus que je pourrais créer:

démo du menu coulissant Android

Capture d'écran de l'émulateur (mid-scroll):

Screenshot from emulator (mid-scroll)

Capture d'écran de l'appareil (défilement complet). Notez que mon icône n'est pas aussi large que l'icône du menu Facebook, de sorte que la vue du menu et la vue "app" ne sont pas alignées.

Screenshot from device (full-scroll)

176
Paul Grime

J'ai implémenté la navigation par glisser-déplacer de type facebook dans ce projet de bibliothèque .

Vous pouvez facilement l'intégrer dans votre application, votre interface utilisateur et votre navigation. Vous devrez mettre en œuvre une seule activité et un seul fragment, en informer la bibliothèque. La bibliothèque fournira toutes les animations et la navigation souhaitées.

Dans le référentiel, vous pouvez trouver un projet de démonstration, avec l'utilisation de la lib pour mettre en œuvre une navigation de type facebook. Voici une courte vidéo avec enregistrement du projet de démonstration .

De plus, cette bibliothèque devrait être compatible avec ce modèle ActionBar, car elle est basée sur les transactions Activités et TranslateAnimations (et non sur les transactions Fragments et les vues personnalisées).

Pour le moment, le plus gros problème est de bien le faire fonctionner pour une application prenant en charge les modes portrait et paysage. Si vous avez des commentaires, merci de les indiquer via github.

Bonne chance,
Alex

37
AlexKorovyansky

Voici n autre lib et semble être le meilleur à mon avis. Je ne l'ai pas écrit ..

MISE À JOUR:

Ce code semble fonctionner le mieux pour moi et il déplace toute la barre d’action similaire à celle de l’application G +.

Comment Google a-t-il réussi à faire cela? Slide ActionBar dans Android application

24
Patrick

Je pense que Facebook app n'est pas écrit en code natif (par code natif je veux dire, en utilisant des dispositions dans Android), mais ils ont utilisé webview pour cela et ont utilisé certaines bibliothèques javascript ui comme sencha . Cela peut être facilement réalisé en utilisant le framework sencha.

enter image description here

22
Sanjay Kumar

Voici encore une autre (très belle) bibliothèque open source!

La bonne chose à propos de celui-ci est qu'il s'intègre facilement à ActionBarSherlock.

Voici le lien vers le projet github

Voici le lien de téléchargement Google Play

20
dwbrito

Je viens d'implémenter une vue similaire pour mon propre projet. Vous pouvez le vérifier ici

Voici l'écran de l'exemple d'application basé sur la bibliothèque que j'ai écrite: ActionsContentView Example

Il est facile d’utiliser cette vue personnalisée en tant qu’élément de la présentation XML. Voici un exemple:

    <shared.ui.actionscontentview.ActionsContentView
      Android:id="@+id/content"
      Android:layout_width="match_parent"
      Android:layout_height="match_parent"
      app:actions_layout="@layout/actions"
      app:content_layout="@layout/content" />

Si vous avez des questions sur l’utilisation de la bibliothèque ActionsContentView, je peux écrire un petit article sur le site Wiki des projets.

Quelques avantages de cette bibliothèque:

  • possibilité de glisser la vue au toucher
  • il est facile d'ajuster la taille de la barre d'actions en XML
  • support de toutes les versions de Android SDK à partir de 2.0

Il y a une limite:

  • toutes les vues de défilement horizontal ne fonctionneront pas aux limites de cette vue

Cordialement, Steven

17
rude

Avec Android révision de package de support 13 (mai 2013), DrawerLayout permet de créer un tiroir de navigation pouvant être tiré à partir du bord d'une fenêtre. Et, le tiroir de navigation est un modèle de conception maintenant.

bibliothèque de support v4

modèle de dessin du tiroir de navigation

16
Wubao Li

A fait un tour d'horizon d'un implémentation existante et l'a transformé en un projet de bibliothèque plus un exemple d'application. Nous avons également ajouté l’analyse XML ainsi que la détection automatique d’une barre d’action éventuellement présente, de sorte qu’elle fonctionne avec la barre native ainsi qu’une barre d’action de support telle que ActionBarSherlock.

Celui-ci glisse également la barre d'action!

Le tout est un projet de bibliothèque associé à un exemple d'application. Il est décrit plus en détail à n menu déroulant pour Android comme les applications Google et Facebook . Merci à scirocco pour l'idée initiale et le code!

SlideMenu on GingerbreadSlideMenu on ICS with ActionBar

15
bk138

Ceci est simple et élégant: https://github.com/akotoe/Android-slide-out-menu.git

Instantané:

enter image description here

10
Edward

Je pense que la bibliothèque n'a pas mentionné:

jfeinstein1 / SlidingMen

_github url:_ https://github.com/jfeinstein10/SlidingMenu

  • fonctionne très bien avec la barre d'action ActionBarSherlock qui aide à la compatibilité !
  • Soutien glisser à droite et pas seulement glisser via le bouton!
10
madlymad

Je ne peux pas commenter la réponse donnée par @Paul Grime pour le moment, de toute façon, j'ai soumis à son projet github le correctif pour le problème de scintillement ....

Je vais poster le correctif ici, peut-être que quelqu'un en a besoin. Vous avez juste besoin d'ajouter deux lignes de code. Le premier en dessous de l'appel anim.setAnimationListener:

anim.setFillAfter(true);

Et le second après l'appel de app.layout ():

app.clearAnimation();

J'espère que cela t'aides :)

8
Fatal1ty2787

J'ai implémenté cela avec AbsoluteLayout et un contrôleur de diapositives simple qui déplace la vue vers un décalage négatif à masquer.

Si quelqu'un est intéressé, je peux nettoyer le code/la mise en page et poster. Je sais qu'AbsoluteLayout est obsolète, mais qu'il s'agissait d'une implémentation très simple. Vue de gauche/Vue de droite, et lorsque vous "glissez en position ouverte", déplacez simplement la vue de gauche d'un décalage -X vers la largeur de l'appareil - tout ce que vous voulez afficher de la vue de droite

6
Rich

Bonjour, c’est le meilleur exemple d’application de démonstration qui fournit Facebook comme un menu de diapositives. Vérifiez le code ici

enter image description here

enter image description here

4
Mukesh Y

Récemment, j'ai travaillé sur la version de ma mise en œuvre du menu coulissant. Il utilise la bibliothèque populaire SlidingMenu de la bibliothèque J.Feinstein Android.

Veuillez vérifier le code source sur GitHub:

https://github.com/baruckis/Android-SlidingMenuImplementation

Téléchargez l'application directement sur l'appareil pour essayer:

https://play.google.com/store/apps/details?id=com.baruckis.SlidingMenuImplementation

Le code devrait être explicite à cause des commentaires. J'espère que cela vous sera utile! ;)

3
Andrius Baruckis

J'ai trouvé un moyen simple pour cela et son fonctionnement. Utilisez tiroir Navigation simple et appelez draw.setdrawerListner () et utilisez la méthode mainView.setX () dans la méthode tiroirSlide ci-dessous ou copiez mon code.

fichier xml

 <Android.support.v4.widget.DrawerLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#000000" >

<RelativeLayout
    Android:id="@+id/content_frame"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="#ffffff">

  <ImageView
      Android:layout_width="40dp"
      Android:layout_height="40dp"
      Android:id="@+id/menu"
      Android:layout_alignParentTop="true"
      Android:layout_alignParentLeft="true"
      Android:layout_marginTop="10dp"
      Android:layout_marginLeft="10dp"
      Android:src="@drawable/black_line"
      />
</RelativeLayout>


<RelativeLayout
    Android:id="@+id/left_drawer"
    Android:layout_width="200dp"
    Android:background="#181D21"
    Android:layout_height="match_parent"
    Android:layout_gravity="start"
    >
    </RelativeLayout>
 </Android.support.v4.widget.DrawerLayout>

Fichier java

   public class MainActivity extends AppCompatActivity {
DrawerLayout drawerLayout;
RelativeLayout mainView;
ImageView menu;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    menu=(ImageView)findViewById(R.id.menu);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mainView=(RelativeLayout)findViewById(R.id.content_frame);

    menu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            drawerLayout.openDrawer(Gravity.LEFT);
        }
    });

    drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            mainView.setX(slideOffset * 300);
        }

        @Override
        public void onDrawerOpened(View drawerView) {

        }

        @Override
        public void onDrawerClosed(View drawerView) {

        }

        @Override
        public void onDrawerStateChanged(int newState) {

        }
    });
 }
}

enter image description here

Merci

3
Dalvinder Singh

Dans le cadre de ma Android bibliothèque commune (ACL), j'ai implémenté son propre SideBar. Principaux avantages:

  1. La barre latérale peut être réglée dans n’importe quelle position: gauche, haut, bas, droite
  2. La vue principale et la vue coulissante sont cliquables
  3. La barre latérale peut être partiellement affichée
  4. Les attributs stylés de la barre latérale facilitent le changement de style
  5. Artefact dans le repo maven
  6. Partie d'une grande bibliothèque

Code source: https://github.com/serso/Android-common/tree/master/views/src/main/Java/org/solovyev/Android/view/sidebar

Utilisation: https://github.com/serso/Android-common/blob/master/samples/res/layout/acl_view_layout.xml

3
se.solovyev

Voici le guide de conception et de développement trouvé dans la documentation officielle Android sans avoir besoin d'ajouter une bibliothèque externe non officielle. Seule la bibliothèque de support Android fera l'affaire. Trouvez les liens ici.

conception et développer .

2
jai_b

Je vais faire des suppositions audacieuses ici ...

Je suppose qu'ils ont une disposition qui représente le menu qui n'est pas visible. Lorsque vous appuyez sur le bouton de menu, ils animent la disposition/la vue du haut pour s’écarter et permettent simplement la visibilité de la disposition du menu. Je n'ai pas pensé à cela qui pourrait causer des problèmes d'index z dans les vues, ni à la manière dont ils contrôlent cela.

2
jlindenbaum

L'application Facebook Android est éventuellement créée avec Fragments . Le menu est un fragment, l'activité détaillée (échange de nouvelles/événements/amis, etc.) est l'autre fragment. Fondamentalement, une tablette "maître & détail" mise en page sur un téléphone.

1
Gunnar Karlsson

Pour information, comme la bibliothèque de compatibilité commence par 1.6 et que cette application facebook fonctionne également sur les appareils dotés de Android 1.5, cela ne pourrait pas être fait avec Fragments.

Pour ce faire, procédez comme suit: Créez une activité "de base" BaseMenuActivity dans laquelle vous mettez toute la logique du onItemClickListener pour votre liste de menus et définissez les 2 animations ("open" et "close"). À la fin/au début des animations, vous affichez/masquez la disposition de BaseMenuActivity (appelons-la menu_layout). La présentation de cette activité est simple, c’est seulement une liste avec des éléments + une partie transparente à droite de votre liste. Cette partie sera cliquable et sa largeur sera la même que celle de votre "bouton de déplacement". Avec cela, vous pourrez cliquer sur cette disposition pour lancer l'animation afin de laisser le contenu_layout glisser vers la gauche et de prendre tout l'écran. Pour chaque option (c'est-à-dire un élément de la liste de menus), vous créez un "ContentActivity" qui étend le BaseMenuActivity. Ensuite, lorsque vous cliquez sur un élément de la liste, vous démarrez votre ItemSelectedContentActivity avec le menu visible (que vous fermez dès que votre activité commence). Les mises en page de chaque ContentActivity sont FrameLayout et incluent le et. Il vous suffit de déplacer le content_layout et de rendre le menu_layout visible quand vous le souhaitez.

C'est une façon de le faire et j'espère avoir été suffisamment clair.

1
p4u144

Je n'ai pas vu l'incroyable SimonVT/Android-menudrawer mentionné nulle part dans les réponses ci-dessus. Alors voici un lien

https://github.com/SimonVT/Android-menudrawer

Son super facile à utiliser et vous pouvez le mettre à gauche, à droite, en haut ou en bas. Très bien documenté avec exemple de code et licence Apache 2.0.

1
lwegener

Android a ajouté le tiroir de navigation. Référer cette

lien

1
Deepak Goel

Je joue avec cela depuis quelques jours et j'ai mis au point une solution assez simple au final et qui fonctionne avant Honeycomb. Ma solution consistait à animer la vue que je voulais faire glisser (FrameLayout pour moi) et à écouter la fin de l'animation (à quel point décaler la position gauche/droite de la vue). J'ai collé ma solution ici: Comment animer la traduction d'une vue

1
Adil Hussain

Après une recherche de plusieurs heures, j’ai trouvé que la solution de Paul Grime était probablement la meilleure. Mais il contient trop de fonctionnalités. Donc, il peut être difficile d'étudier pour les débutants. Je voudrais donc présenter mon implémentation qui est issue de l’idée de Paul mais elle est plus simple et devrait être facile à lire.

implémentation de la barre de menu latérale en utilisant Java code sans XML

1
Chao

En juin 2012, Google a ajouté des "modèles" dans le plugin Eclipse ADT , et il existe un modèle appelé "flux maître/détail" qui fait exactement cela (sur la base de fragmets).

0
rds