Android slide gaya Facebook


283

Aplikasi Facebook baru dan navigasinya sangat keren. Saya hanya mencoba melihat bagaimana itu dapat ditiru dalam aplikasi saya.

Adakah yang tahu bagaimana hal itu bisa dicapai?

masukkan deskripsi gambar di sini

Pada mengklik tombol kiri atas slide halaman dan layar berikut ditampilkan:

masukkan deskripsi gambar di sini

Video Youtube


2
ya video juga akan sangat membantu, untuk mengetahui efek yang tepat.
bool.dev

@ bool.dev di sini adalah videonya: youtube.com/watch?v=ANLMaL7zn20
Harsha MV

@HarshaMV: - Coba cari utas ini. Saya pikir mungkin sedikit membantu Anda. stackoverflow.com/questions/8453320/…
Shashank_Itmaster

3
Artikel yang sangat bagus tentang navigasi slide-out di Android - androiduipatterns.com/2012/06/… . Harus baca.
AlexKorovyansky

Saya telah menerapkan menu geser saya sendiri, lihat di sini stackoverflow.com/a/15880375/1939564
Muhammad Babar

Jawaban:


176

Saya sudah pernah bermain dengan ini sendiri, dan cara terbaik yang bisa saya temukan adalah dengan menggunakan FrameLayout dan meletakkan HorizontalScrollView (HSV) khusus di atas menu. Di dalam HSV adalah Tampilan aplikasi Anda, tetapi ada Tampilan transparan sebagai anak pertama. Ini berarti, ketika HSV memiliki zero scroll offset, menu akan ditampilkan (dan masih dapat diklik secara mengejutkan).

Ketika aplikasi dimulai, kita gulir HSV ke offset tampilan aplikasi pertama yang terlihat, dan ketika kita ingin menunjukkan menu kita gulir kembali untuk mengungkapkan menu melalui tampilan transparan.

Kode ada di sini, dan dua tombol terbawah (disebut HorzScrollWithListMenu dan HorzScrollWithImageMenu) dalam aktivitas Launch menunjukkan menu terbaik yang bisa saya buat:

Demo menu geser Android

Tangkapan layar dari emulator (mid-scroll):

Tangkapan layar dari emulator (mid-scroll)

Tangkapan layar dari perangkat (gulir penuh). Perhatikan bahwa ikon saya tidak selebar ikon menu Facebook, sehingga tampilan menu dan tampilan 'aplikasi' tidak selaras.

Tangkapan layar dari perangkat (gulir penuh)


1
@AmokraneChentir Anda dapat menggunakan berbagai aktivitas dengan memanggil aktivitas getDrawingCache()non-menu Anda dan membuat ImageView dari bitmap. Kemudian panggil startActivity(intent)& overridePendingTransition(0, 0)di onClickmetode ClickListenerForScrollingkelas untuk segera menampilkan aktivitas baru dan mendapatkan efek yang diinginkan.
Siklab.ph

1
Saya ingin tahu apakah HorizontalScrollView kustom dapat digunakan dengan ListView karena dokumen resmi HorizontalScrollView menyebutkan bahwa itu akan memaksa ListView untuk menampilkan seluruh itemnya.
Shiami

1
garpu ini mengganti aktivitas tanpa menggunakan fragmen!
Erik B

1
Terima kasih atas bantuan Anda, saya dapat menggunakan HorzScrollWithListMenu.java.
KarenAnne

2
Terima kasih banyak @PaulGrime ... ini adalah contoh sederhana yang bagus dan hal yang paling mengagumkan adalah dalam demo ini mudah dimengerti dan mudah dikustomisasi dan tidak ada proyek perpustakaan untuk digunakan.
Naveen Kumar

37

Saya telah menerapkan navigasi slideout seperti facebook di proyek perpustakaan ini .

Anda dapat dengan mudah memasukkannya ke dalam aplikasi, UI, dan navigasi Anda. Anda hanya perlu menerapkan satu Kegiatan dan satu Fragmen, biarkan perpustakaan mengetahuinya - dan perpustakaan akan memberikan semua animasi dan navigasi yang diinginkan.

Di dalam repo Anda dapat menemukan proyek-demo, dengan cara menggunakan lib untuk mengimplementasikan navigasi seperti facebook. Ini adalah video pendek dengan catatan proyek demo .

Lib ini juga harus kompatibel dengan pola ActionBar ini, karena didasarkan pada transaksi Aktivitas dan TranslateAnimations (bukan transaksi Fragmen dan Tampilan kustom).

Saat ini, masalah terbesar adalah membuatnya berfungsi dengan baik untuk aplikasi, yang mendukung mode potret dan lansekap. Jika Anda memiliki umpan balik, berikan melalui github.

Semua yang terbaik,
Alex


4
Hai, saya baru tahu bahwa pendekatan Anda akan membuat bitmap tangkapan layar besar setiap kali Anda membuka bilah sisi. Ini akan menumbuhkan ukuran tumpukan dan dapat menyebabkan kesalahan memori.
Shiami

3
Terima kasih korovyansk sayang, ini sangat bagus. tetapi tata letak Absolut sudah usang dalam OS baru. Bisakah Anda kode lagi?
Hesam

Terima kasih semua orang yang memberikan umpan balik di github atau di sini. Saya tahu tentang beberapa bug dan punya ide bagaimana membuat aplikasi lebih baik. Saya berhasil, ketika saya akan memiliki waktu luang.
AlexKorovyansky

Hai koroyansk. Saya menggunakan perpustakaan Anda itu berfungsi dengan baik. Tapi saya punya sedikit masalah. Ketika daftar slide terbuka, saya memulai aktivitas pada item tampilan daftar, klik. Aktivitas mulai benar tetapi animasi slide-in tidak berfungsi. Code((MenuActivity) getActivity()).getSlideoutHelper().close(); startActivity(new Intent(getActivity(), MyActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtra("category", position));
Sunny

dalam kasus Anda, aktivitas baru akan segera terbuka tanpa menunggu akhir animasi, Anda dapat mencoba memperluas perpustakaan dan menambahkan panggilan balik untuk akhir animasi. mungkin saya akan menambahkan fitur ini ke versi perpustakaan berikutnya.
AlexKorovyansky

24

Inilah lib lain dan tampaknya menjadi yang terbaik menurut saya. Saya tidak menulisnya ..

MEMPERBARUI:

Kode ini tampaknya bekerja paling baik untuk saya dan memindahkan seluruh Actionbar mirip dengan aplikasi G +.

Bagaimana Google bisa melakukan ini? Geser ActionBar di aplikasi Android


7
Saya menulis perpustakaan ini, senang Anda menyukainya. Ini sangat mendasar untuk saat ini, tetapi saya akan memperbaikinya selama beberapa minggu mendatang. Lebih dari menyambut bagi orang lain untuk melakukan perubahan juga.
David Scott

Perpustakaan ini benar-benar luar biasa. Sangat mudah digunakan dan bekerja dengan sempurna. Terima kasih. Saya hanya ingin menambahkan bahwa sampel hanya berfungsi dengan ICS (dan saya pikir Honeycomb) .. tetapi perpustakaan bekerja kembali ke 2.1, saya menggunakannya tanpa masalah.
Steven Elliott

Tidak buruk, ini cukup sederhana tetapi berfungsi dengan baik dan pengaturannya sangat cepat. Namun, itu tidak sangat dapat dikonfigurasi dari luar perpustakaan: semua item memiliki tata letak sederhana yang sama, dan saat bepergian tidak ada kemungkinan daftar dinamis; kedua hal itu akan mudah diadaptasi tetapi saya benar-benar perlu pengelompokan di dalam daftar dan itu tidak akan semudah itu.
htafoya

22

Saya pikir aplikasi facebook tidak ditulis dalam kode asli (dengan kode asli saya maksudkan, menggunakan tata letak di Android) tetapi mereka telah menggunakan tampilan web untuk itu dan telah menggunakan beberapa perpustakaan javascript ui seperti sencha . Itu dapat dengan mudah dicapai menggunakan kerangka sencha.

masukkan deskripsi gambar di sini


16
+1 UI dapat berubah tanpa Pembaruan Aplikasi, jadi pasti aplikasi web dan aplikasi android pada dasarnya adalah browser web.
Rudy

7
Saya tidak yakin ini masalahnya. Kerangka untuk UI dapat berupa asli (misalnya tampilan menu aktual dan Tampilan asli lainnya), dan konten untuk Tampilan tersebut dimuat secara dinamis. Jika kerangka aplikasi berubah, maka pembaruan kemungkinan akan diperlukan.
Paul Grime

2
Saya tidak berpikir bahwa aplikasi facebook adalah aplikasi web. Terlalu lancar, cepat. Saya tahu aplikasi web / hybrid yang terlihat bagus "seperti asli", tetapi masih ada sedikit keterlambatan dibandingkan dengan asli. Tidak hanya kerangka - daftar, peta, dll. Terlihat dan terasa asli. Setidaknya dengan teknologi terkini.
Ixx

Ok, seseorang mengatakan kepada saya bahwa aplikasi ini tidak seperti ini selama sekitar 2 bulan - jadi Anda merujuk ke versi lama yang saya tidak tahu. Bagaimanapun mungkin informatif untuk berkomentar bahwa aplikasi saat ini jelas asli.
Ixx

20

Ini adalah perpustakaan open source (sangat bagus) yang lain!

Fitur bagus tentang ini adalah ia mudah diintegrasikan dengan ActionBarSherlock.

Inilah tautan proyek github

Inilah tautan unduhan Google Play


2
Saya pikir ini yang terbaik
Harsha MV

17

Saya baru saja mengimplementasikan tampilan serupa untuk proyek saya sendiri. Anda bisa memeriksanya di sini

Berikut adalah layar contoh aplikasi berdasarkan perpustakaan yang saya tulis: Contoh ActionsContentView

Mudah untuk menggunakan tampilan kustom ini sebagai elemen tata letak XML. Berikut ini contohnya:

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

Saya Anda akan memiliki pertanyaan tentang penggunaan perpustakaan ActionsContentView. Saya dapat menulis artikel kecil di proyek Wiki.

Beberapa keuntungan dari perpustakaan ini:

  • kemampuan untuk menggeser tampilan dengan sentuhan
  • mudah untuk menyesuaikan ukuran bilah tindakan dalam XML
  • mendukung semua versi Android SDK mulai dari 2.0 ke atas

Ada satu batasan:

  • semua tampilan gulir horizontal tidak akan bekerja pada batas tampilan ini

Salam, Steven


cara mengatur UI pertama sebagai pic unggahan Anda? Saya mengujinya UI pertama adalah webView di layar. Saya berharap listview ditampilkan ketika aplikasi dimulai. melalui lib Anda adalah 2.0, tetapi demo Anda adalah 4.0, saya harap Anda juga dapat menggunakan 2.0.that is cool
pengwang

@ Wangwang: Saya baru saja mendorong beberapa kode untuk mendukung fitur ini. Anda dapat melakukan ini saat Activity.onResume () dengan memanggil viewActionsContentView.showActions ();
kasar

Apakah mungkin untuk menonaktifkan acara sentuh di bagian tersembunyi? Misalnya, ketika bagian kanan aktif maka semua tampilan di sebelah kanan dinonaktifkan.
Valeriy

Ada kemungkinan untuk memblokir tata letak konten saat tindakan satu ditampilkan. Saya sudah mengirimi Anda email proyek sampel.
kasar

16

Dengan revisi paket dukungan Android 13 (Mei 2013), ada DrawerLayout untuk membuat Drawer Navigasi yang dapat ditarik dari tepi jendela. Dan, laci navigasi adalah pola desain sekarang.

perpustakaan dukungan v4

pola desain laci navigasi


2
Ya, level API minimum yang didukung adalah 4.
Wubao Li

1
Dan perpustakaan kompatibilitas memungkinkan Anda menggunakannya di perangkat yang lebih lama. Saya baru saja mengembangkan satu untuk Gingerbread dan kemudian.
Tony Maro

2
Ini perlu lebih jauh di atas. Terlalu banyak perpustakaan pihak ketiga yang asing dalam jawaban lainnya.
Jason Axelson

15

Melakukan pembulatan dari implementasi yang ada dan mengubahnya menjadi proyek perpustakaan plus aplikasi contoh. Juga menambahkan parsing XML serta deteksi otomatis dari actionbar yang mungkin ada, sehingga berfungsi dengan asli serta bilah tindakan dukungan seperti ActionBarSherlock.

Yang ini juga menghilangkan bilah tindakan!

Semuanya adalah proyek perpustakaan bersama dengan contoh aplikasi dan dijelaskan di Menu geser untuk Android seperti aplikasi google dan facebook . Berkat scirocco untuk ide dan kode awal!

SlideMenu on Gingerbread SlideMenu di ICS dengan ActionBar


10

Bisakah kamu membantuku?? Pertanyaan yang terkait dengan slider .. Berikut ini tautan stackoverflow.com/questions/14500927/…
moDev

apakah itu memungkinkan Anda untuk meluncur dengan menyentuh? (Berarti menggesek)
alicanbatur

@Edward Saya telah bekerja dengan sampel Anda, saya pikir bagus dan mudah digunakan tetapi sampai pada masalah, ketika memutar layar (saya menggunakan android: configChanges = "orientasi" dalam manifes dengan android 3.1 karena saya tidak ingin aktivitas di-restart) layar berputar dengan baik tetapi framelayout mempertahankan ukurannya dan itu tidak terlihat bagus, apakah Anda memiliki cara untuk mengatasi ini? Saya sudah mencoba semuanya tetapi tidak bisa memperbaikinya. terima kasih
zvzej

@Edward di sini adalah pertanyaan saya menggunakan sampel Anda, tolong bantu saya atau beri saya saran terima kasih. stackoverflow.com/questions/16778911/...
zvzej


8

Tidak dapat mengomentari jawaban yang diberikan oleh @Paul Grime, toh saya sudah mengirimkan proyek github-nya perbaikan untuk masalah flicker ....

Saya akan memposting perbaikannya di sini, mungkin seseorang membutuhkannya. Anda hanya perlu menambahkan dua baris kode. Yang pertama di bawah panggilan anim.setAnimationListener:

anim.setFillAfter(true);

Dan yang kedua setelah panggilan app.layout ():

app.clearAnimation();

Semoga ini membantu :)


6

Saya telah menerapkan ini dengan AbsoluteLayout dan pengendali slide sederhana yang memindahkan tampilan ke offset negatif untuk disembunyikan.

Jika ada yang tertarik, saya bisa membersihkan kode / tata letak dan posting. Saya tahu AbsoluteLayout sudah usang, tapi itu implementasi yang sangat mudah. Tampak Kiri / Tampak Kanan, dan ketika "meluncur terbuka", cukup gerakkan pandangan kiri keluar dari -X offset ke lebar perangkat - apa pun yang Anda ingin tunjukkan dari Tampilan Kanan.


Saya akan menghargai jika Anda bisa melakukannya tanpa AbsoluteLayout! Terima kasih!
Igor

4

Halo ini adalah contoh aplikasi demo terbaik yang menyediakan facebook seperti menu slide. Periksa kodenya di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


3

Sebagai bagian dari Android Common Library (ACL) saya, saya mengimplementasikan SideBar sendiri. Keuntungan utama:

  1. Bilah samping dapat diatur ke posisi apa pun: kiri, atas, bawah, kanan
  2. Tampilan utama dan tampilan geser dapat diklik
  3. Bilah samping dapat ditampilkan sebagian
  4. Atribut yang dapat diubah untuk SideBar memudahkan untuk mengubah gaya itu
  5. Artefak dalam repo pakar
  6. Bagian dari perpustakaan besar

Kode sumber: https://github.com/serso/android-common/tree/master/views/src/main/java/org/solovyev/android/view/sidebar

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



3

Saya menemukan cara paling sederhana untuk itu dan cara kerjanya. Gunakan laci Navigasi sederhana dan panggil drawer.setdrawerListner () dan gunakan metode mainView.setX () pada metode drawerSlide di bawah atau salin kode saya.

file 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>

file 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) {

        }
    });
 }
}

masukkan deskripsi gambar di sini

Terima kasih


2

Saya akan membuat beberapa tebakan berani di sini ...

Saya menganggap mereka memiliki tata letak yang mewakili menu yang tidak terlihat. Ketika tombol menu diketuk, mereka menghidupkan tata letak / tampilan di atas untuk menyingkir, dan cukup mengaktifkan visibilitas tata letak menu. Saya belum memikirkan hal ini yang menyebabkan masalah indeks-z dalam pandangan, atau bagaimana mereka mengendalikannya.


jika Anda telah menggunakan aplikasi .. Anda benar-benar dapat melihat bahwa tata letak slide ke kanan memberi jalan ke bagian menu. saya akan mencoba membuat video dan mengunggahnya.
Harsha MV

1
Saya menggunakan versi iPhone, jika versi Android sama, maka saya ragu itu jauh berbeda dari apa yang saya jelaskan. Saya belum menulis banyak animasi di Android, jadi saya tidak bisa memberi tahu Anda seperti apa kode animasi, tetapi dengan kata-kata kasar, saya menganggap itu yang saya jelaskan.
jlindenbaum

terima kasih, youtube.com/watch?v=ANLMaL7zn20 apakah ini efek yang sama pada iPhone.
Harsha MV


2

Berikut ini adalah panduan desain dan pengembangan yang ditemukan dalam dokumentasi android resmi tidak perlu menambahkan perpustakaan eksternal tidak resmi. Hanya perpustakaan dukungan android yang akan melakukannya. Temukan tautan di sini.

desain dan pengembangan .


1

Aplikasi Facebook Android mungkin dibuat dengan Fragmen . Menu adalah satu Fragmen, Kegiatan mendalam (Newsfeed / Acara / Teman dll) adalah Fragmen lainnya. Pada dasarnya tata letak tablet 'master & detail' di ponsel.


Dalam hal ini kita perlu membuat actionbar di dalam fragmen, jadi kita tidak bisa menggunakan fitur kerangka Android apa pun untuk membuatnya, kan? Sebenarnya saya tidak bisa yakin tentang facebook, tetapi bagi banyak pengembang cara yang terlalu sulit untuk membuat actionbar tanpa bantuan kerangka kerja, saya harap kali ini sudah berakhir.
AlexKorovyansky

1

Sebagai info, ketika pustaka kompatibilitas dimulai dengan 1.6 dan aplikasi facebook ini juga berjalan pada perangkat dengan Android 1.5, itu tidak dapat dilakukan dengan Fragmen.

Cara Anda dapat melakukannya, adalah: Buat aktivitas "base" BaseMenuActivity di mana Anda meletakkan semua logika untuk onItemClickListener untuk daftar menu Anda dan menentukan 2 animasi ("buka" dan "tutup"). Di akhir / awal animasi, Anda menunjukkan / menyembunyikan tata letak BaseMenuActivity (sebut saja menu_layout). Tata letak untuk aktivitas ini sederhana, hanya daftar dengan item + bagian transparan di kanan daftar Anda. Bagian ini akan dapat diklik dan lebarnya akan sama dengan "tombol pindahkan" Anda. Dengan itu, Anda dapat mengeklik tata letak ini untuk memulai animasi untuk membiarkan content_layout meluncur ke kiri dan mengambil seluruh layar. Untuk setiap opsi (yaitu item dari daftar menu), Anda membuat "ContentActivity" yang memperluas BaseMenuActivity. Kemudian ketika Anda mengklik pada item daftar, Anda memulai ItemSelectedContentActivity Anda dengan menu yang terlihat (yang akan Anda tutup segera setelah aktivitas Anda dimulai). Layout untuk setiap ContentActivity adalah FrameLayout dan termasuk dan. Anda hanya perlu memindahkan content_layout dan membuat menu_layout terlihat saat Anda inginkan.

Itu cara untuk melakukannya, dan saya harap saya sudah cukup jelas.


1

Saya telah bermain dengan ini beberapa hari terakhir dan saya datang dengan solusi yang cukup mudah pada akhirnya, dan yang berfungsi sebelum Honeycomb. Solusi saya adalah untuk menghidupkan Tampilan yang ingin saya geser ( FrameLayoutuntuk saya) dan mendengarkan akhir animasi (di mana titik untuk mengimbangi posisi kiri / kanan Tampilan). Saya telah menempelkan solusi saya di sini: Cara menganimasikan terjemahan Tampilan



1

Saya tidak melihat SimonVT / android-menudrawer luar biasa yang disebutkan di mana saja dalam jawaban di atas. Jadi, inilah tautannya

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

Sangat mudah digunakan dan Anda bisa meletakkannya di kiri, kanan, atas atau bawah. Sangat didokumentasikan dengan baik dengan kode sampel dan lisensi Apache 2.0.


0

Pada Juni 2012, Google telah menambahkan "templat" di plugin Eclipse ADT , dan ada templat yang disebut "master / detail flow" yang melakukan hal itu (berdasarkan pada fragmets)


1
Master / aliran detail bukanlah menu bilah sisi yang dimaksud. Itu hanya dua fragmen yang ditampilkan bersama (tablet) atau secara terpisah (ponsel).
tomash

Nah, pada bulan Juni 2013, Layout Navigasi Laci telah ditambahkan, yang lebih mirip dengan yang dibutuhkan di sini, namun ActionBar tidak akan meluncur dengan laci seperti yang diperlukan bilah geser gaya Facebook di sini.
Khulja Sim Sim
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.