web-dev-qa-db-ja.com

AndroidのFacebookスタイルのスライド

新しいFacebookアプリケーションとそのナビゲーションはとてもクールです。私は自分のアプリケーションでそれがどのようにエミュレートできるかを見ようとしていただけです。

それがどのようにして達成されることができるかについて誰かが手がかりを持っていますか?

enter image description here

左上のボタンをクリックすると、ページがスライドし、次の画面が表示されます。

enter image description here

YouTubeビデオ

281
Harsha M V

私はこれを自分でプレイしました、そして私が見つけることができる最も良い方法はFrameLayoutを使用してメニューの上にカスタムHorizo​​ntalScrollView(HSV)を置くことでした。 HSVの内部にはアプリケーションビューがありますが、最初の子として透明なビューがあります。つまり、HSVのスクロールオフセットがゼロの場合、メニューは透けて見えます(それでも驚くほどクリック可能です)。

アプリが起動したら、HSVを最初に表示されているアプリケーションビューのオフセットまでスクロールします。メニューを表示したい場合は、スクロールバックして透明なビューを通してメニューを表示します。

コードはここにあり、Launchアクティビティの下の2つのボタン(HorzScrollWithListMenuとHorzScrollWithImageMenuと呼ばれます)は、私が思い付くことができる最高のメニューを示しています。

アンドロイドスライディングメニューデモ

エミュレータからのスクリーンショット(中央スクロール):

Screenshot from emulator (mid-scroll)

デバイスからのスクリーンショット(フルスクロール)。私のアイコンはFacebookのメニューアイコンほど広くはないので、メニュービューと 'app'ビューは整列していません。

Screenshot from device (full-scroll)

176
Paul Grime

私は このライブラリプロジェクト にfacebook風のスライドアウトナビゲーションを実装しました。

あなたはそれをあなたのアプリケーション、あなたのUIとナビゲーションに簡単に組み込むことができます。 1つのActivityと1つのFragmentだけを実装する必要があります。それをライブラリに知らせます - そしてライブラリはすべての必要なアニメーションとナビゲーションを提供します。

リポジトリの中にはデモプロジェクトがあり、libを使ってfacebookのようなナビゲーションを実装する方法があります。 これはデモプロジェクトの記録がある短いビデオです

また、このライブラリは、このトランザクションバーパターンと互換性があるはずです。これは、アクティビティトランザクションとTranslateAnimationsに基づいているためです(フラグメントトランザクションとカスタムビューではありません)。

今のところ、最大の問題は、ポートレートモードとランドスケープモードの両方をサポートするアプリケーションに最適に機能させることです。何かご意見がありましたら、githubで提供してください。

ではごきげんよう、
アレックス

37
AlexKorovyansky

これが another libで、私の考えでは最高のようです。書きませんでした。

更新:

このコードは私にとっては最もうまくいくように思われ、それはG +アプリに似た全体のActionbarを動かします。

Googleはどうやってこれを実現しましたか?AndroidアプリケーションのActionBarをスライドさせます

24
Patrick

私はFacebookアプリはネイティブコードで書かれていないと思います(つまりネイティブコードではAndroidのレイアウトを使用しています)が、彼らはウェブビューを使用し、 sencha のようなjavascriptのuiライブラリを使用しています。 。それはsenchaフレームワークを使って簡単に達成できます。

enter image description here

22
Sanjay Kumar

これはまた別の(とても素敵な)オープンソースライブラリです。

これに関する優れた機能は、ActionBarSherlockと簡単に統合できることです。

これが github プロジェクトのリンクです。

これが Google Play ダウンロードリンクです。

20
dwbrito

私は自分のプロジェクトに対して同様のビューを実装したところです。確認できます ここ

これは私が書いたライブラリに基づいたサンプルアプリケーションの画面です。 ActionsContentView Example

このカスタムビューをXMLレイアウトの要素として使用するのは簡単です。これが例です。

    <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" />

私はあなたが私がプロジェクトWikiで小さな記事を書くことができるActionsContentViewライブラリの使用法についての質問をするでしょう。

このライブラリのいくつかの利点:

  • タッチでビューをスライドさせる機能
  • xMLでアクションバーのサイズを調整するのは簡単です
  • 2.0以降のすべてのAndroid SDKバージョンのサポート

1つ制限があります。

  • すべての水平スクロールビューは、このビューの境界では機能しません。

よろしく、スティーブン

17
rude

Androidサポートパッケージのリビジョン13(2013年5月)では、ウィンドウの端から引き込むことができるNavigation Drawerを作成するためのDrawerLayoutがあります。そして今、ナビゲーション引き出しはデザインパターンです。

v4サポートライブラリ

ナビゲーション引き出しデザインパターン

16
Wubao Li

既存の実装 をまとめてライブラリプロジェクトとサンプルアプリケーションに変えました。また、XML解析と、存在する可能性があるアクションバーの自動検出も追加されたため、ネイティブアクションバーやActionBarSherlockなどのサポートアクションバーと連携します。

これもアクションバーをスライドさせます。

全体的なことは、サンプルアプリと一緒にライブラリプロジェクトであり、 GoogleやFacebookのアプリのようなAndroid用のスライディングメニュー で説明されています。最初のアイデアとコードを提供してくれた scirocco に感謝します。

SlideMenu on GingerbreadSlideMenu on ICS with ActionBar

15
bk138

これはシンプルでエレガントです: https://github.com/akotoe/Android-slide-out-menu.git

スナップショット:

enter image description here

10
Edward

図書館は言及していないと思います。

jfeinstein1 / SlidingMen

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

  • アクションバーでうまく動作しますActionBarSherlockこれは役に立ちます下位互換性
  • サポート右スライドそしてボタンでスライドするだけでなく!
10
madlymad

とにかく、私は彼のgithubプロジェクトでフリッカー問題の修正を提出しました。

私はここに修正を載せるつもりです、多分誰かがそれを必要とします。 2行のコードを追加するだけです。 anim.setAnimationListener呼び出しの下の最初のもの:

anim.setFillAfter(true);

そしてapp.layout()呼び出しの後の2番目のもの:

app.clearAnimation();

お役に立てれば :)

8
Fatal1ty2787

私はこれをAbsoluteLayoutとビューを隠すために負のオフセットに移動する簡単なスライドコントローラで実装しました。

誰か興味があるなら、私はコード/レイアウトを整理して投稿することができます。 AbsoluteLayoutは廃止予定ですが、非常に単純な実装でした。左ビュー/右ビュー、そして「スライドして開く」場合は、左ビューを-Xオフセットからデバイスの幅まで外側に移動します。

6
Rich

こんにちはこれはスライドメニューのようなフェイスブックを提供する最高のサンプルデモアプリです。コードを確認してください ここ

enter image description here

enter image description here

4
Mukesh Y

最近私はスライディングメニューの実装バージョンに取り組んできました。それは人気のあるJ.Feinstein AndroidライブラリSlidingMenuを使用しています。

GitHubでソースコードを確認してください。

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

試してデバイスに直接アプリをダウンロードしてください:

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

コメントのため、コードは一目瞭然です。お役に立てば幸いです。 ;)

3

私はそれとその作業のための最も簡単な方法を見つけました。単純なナビゲーションドロワーを使用してdrawer.setdrawerListner()を呼び出し、下記のdrawerSlideメソッドでmainView.setX()メソッドを使用するか、コードをコピーします。

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>

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

ありがとうございました

3
Dalvinder Singh

私のAndroid Common Library(ACL)の一部として、私は独自のSideBarを実装しました。主な利点:

  1. サイドバーは左、上、下、右の任意の位置に設定できます
  2. メインビューとスライドビューの両方がクリック可能
  3. サイドバーを部分的に表示することができます
  4. SideBarのスタイル設定可能な属性により、スタイルを簡単に変更できます。
  5. Mavenリポジトリ内のアーティファクト
  6. 大きな図書館の一部

ソースコード: https://github.com/serso/Android-common/tree/master/views/src/main/Java/org/solovyev/Android/view/sidebar

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

3
se.solovyev

これは公式のAndroidドキュメントにある非公式の外部ライブラリを追加する必要がない設計および開発ガイドです。 Androidサポートライブラリのみが行います。ここでリンクを見つけてください。

デザイン および 開発

2
jai_b

私はここでいくつかの大胆な推測をするつもりです...

見えないメニューを表すレイアウトがあると思います。メニューボタンがタップされると、それらは一番上のレイアウト/ビューをアニメートして邪魔にならないように動かし、単にメニューレイアウトの可視性を有効にします。私はこれがビューの中で何らかのz-indexの問題を引き起こすということ、またはそれらがどのようにそれを制御するかについて考えていませんでした。

2
jlindenbaum

FacebookのAndroidアプリはおそらく Fragments でビルドされています。メニューは1つのフラグメントです、詳細なアクティビティ(ニュースフィード/イベント/友達など)は他のフラグメントです。基本的には電話のタブレットの「マスターと詳細」のレイアウト。

1
Gunnar Karlsson

情報としては、互換性ライブラリは1.6で始まり、このfacebookアプリはAndroid 1.5のデバイスでも動作しているので、Fragmentsではできませんでした。

あなたがそれをすることができる方法は:あなたがあなたのメニューリストのためにonItemClickListenerのためにすべてのロジックを置く「基本」アクティビティBaseMenuActivityを作成して、そして2つのアニメーション(「開く」と「閉じる」)を定義する。アニメーションの最後/最初に、BaseMenuActivityのレイアウトの表示/非表示を切り替えます(menu_layoutと呼びます)。このアクティビティのレイアウトは単純です。アイテムを含むリストと、リストの右側にある透明な部分だけです。この部分はクリック可能になり、その幅はあなたの「移動ボタン」と同じ幅になります。これで、このレイアウトをクリックしてアニメーションを開始し、content_layoutを左にスライドさせて画面全体を表示することができます。各オプション(メニューリストの項目)に対して、BaseMenuActivityを拡張する "ContentActivity"を作成します。次に、リストの項目をクリックすると、メニューが表示された状態でItemSelectedContentActivityが起動します(これは、アクティビティが開始されるとすぐに閉じます)。各ContentActivityのレイアウトはFrameLayoutであり、とが含まれます。必要なときにcontent_layoutを移動してmenu_layoutを見えるようにするだけです。

それはそれをする方法です、そして私は私が十分明確にしてくれたと思います。

1
p4u144

私は上記の答えのどこかに言及されている驚くべきSimonVT/Android-menudrawerを見ませんでした。だからここにリンクがあります

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

その非常に使いやすいとあなたは左、右、上または下に置くことができます。サンプルコードとApache 2.0ライセンスで非常によく文書化されています。

1
lwegener

Androidはナビゲーション引き出しを追加しました。これを参照

リンク

1
Deepak Goel

私は過去数日間これで遊んできました、そして私は結局非常に簡単で、そしてハニカム以前に働く解決策を思い付きました。私の解決策は、スライドさせたいビューをアニメーション化し(私にとってはFrameLayout)、アニメーションの終わり(ビューの左右の位置をオフセットするポイント)を監視することでした。私はここに私の解決策を貼り付けました: Viewの翻訳をアニメートする方法

1
Adil Hussain

数時間検索した結果、Paul Grimeの解決策がおそらく最善の解決策であることがわかりました。しかし、それにはあまりにも多くの機能があります。だから初心者のために勉強するのは難しいかもしれません。それで私はPaulの考えから来た私の実装を提供したいのですが、それはより簡単で読みやすいはずです。

XMLなしのJavaコードを使用したサイドメニューバーの実装

1
Chao

2012年6月、 GoogleはEclipse ADTプラグインに "templates"を追加しました 、そしてそれを行う "master/detail flow"というテンプレートがあります(断片に基づいて)

0
rds