ETS-PPB

       MyGallery – Aplikasi Manajemen Galeri Pribadi

Nama: Muhamad Faiz Fernanda

NRP: 5025211186

Kelas: PPB-A


   Deskripsi Singkat

MyGallery adalah aplikasi mobile berbasis Android yang dibangun menggunakan bahasa pemrograman Kotlin dengan dukungan Jetpack Components seperti RecyclerView dan Material Components. Aplikasi ini dirancang untuk menjadi galeri pribadi yang ringan dan mudah digunakan, memungkinkan pengguna menambahkan foto dari galeri atau kamera, menyimpan data secara lokal menggunakan SharedPreferences, serta menampilkan foto dalam tampilan grid yang estetik. Pengguna juga dapat melihat gambar dalam mode fullscreen dan menghapus banyak foto sekaligus menggunakan fitur multi-select. Untuk memastikan performa yang optimal, aplikasi ini menggunakan library Glide sebagai media loader untuk menampilkan gambar dengan efisien. Dengan penerapan tema gelap dan terang otomatis (Material DayNight), aplikasi ini memberikan pengalaman pengguna yang modern dan nyaman di berbagai kondisi pencahayaan.

  • Menambahkan foto dari galeri atau kamera langsung
  • Melihat pratinjau dalam tampilan layar penuh
  • Multi-select untuk menghapus lebih dari satu foto sekaligus

        Fitur Utama

  • πŸ“€ Tambah Foto: dari galeri atau kamera
  • πŸ–ΌοΈ Tampilan Grid: dengan label otomatis
  • πŸ” Preview: layar penuh
  • βœ… Multi-Select: untuk hapus beberapa foto
  • πŸ—‘οΈ Hapus Sekaligus: satu klik hapus banyak
  • πŸ’Ύ Penyimpanan Otomatis: ke SharedPreferences

🎯 Manfaat

  • Mempermudah pengelolaan koleksi foto pribadi
  • Tampilan ringan tanpa aplikasi galeri bawaan yang berat
  • Interaksi sederhana dan cepat (klik/tekan lama)

πŸ”§ Teknologi yang Digunakan

  • Android Kotlin (Jetpack, RecyclerView)
  • SharedPreferences untuk penyimpanan lokal
  • Glide untuk loading gambar yang efisien

     Fitur dan Penjelasan Teknis

1. Menambahkan Foto dari Galeri atau Kamera

Pengguna dapat menambahkan gambar dari galeri atau mengambil gambar langsung dari kamera menggunakan Intent:

Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, PICK_IMAGE_CODE);

Untuk kamera:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_REQUEST_CODE);

2. Tampilan Grid Menggunakan RecyclerView

Gambar ditampilkan dalam tampilan grid menggunakan RecyclerView dan GridLayoutManager. Sudut gambar dibuat melengkung agar lebih estetik.

recyclerView.layoutManager = GridLayoutManager(this, 2);
recyclerView.adapter = ImageAdapter(dynamicImageList);

3. Tampilan Fullscreen

Pengguna dapat melihat foto secara fullscreen ketika gambar diklik.

Glide.with(this)
    .load(Uri.parse(imageUri))
    .into(imageView);

4. Penyimpanan Otomatis ke SharedPreferences

Data URI gambar disimpan dalam bentuk JSON agar gambar tetap muncul meskipun aplikasi ditutup.

val json = gson.toJson(dynamicImageList)
sharedPrefs.edit().putString(PREF_KEY, json).apply()

5. Multi-Select dan Delete Sekaligus (Fitur Tambahan)

Fitur tambahan memungkinkan pengguna memilih beberapa gambar sekaligus dan menghapusnya dengan mudah.

val selectedItems = mutableListOf<ImageItem>()

imageView.setOnLongClickListener {
    selectedItems.add(imageItem)
    adapter.notifyItemChanged(position)
    true
}

fun deleteSelectedItems() {
    dynamicImageList.removeAll(selectedItems)
    saveImages()
    adapter.notifyDataSetChanged()
}

6. Floating Action Button (Expandable FAB)

Tombol utama "+" dapat membuka dua tombol lainnya (kamera dan upload) dengan animasi untuk meningkatkan UX.

private fun animateFab(fab: View, show: Boolean, offsetY: Float) {
    fab.animate()
        .translationY(if (show) offsetY else 0f)
        .alpha(if (show) 1f else 0f)
        .scaleX(if (show) 1f else 0f)
        .scaleY(if (show) 1f else 0f)
        .setDuration(200)
        .start()
}

Tampilan Aplikasi :




πŸ“Ή Demo & Unduhan

🎬 Video Demo:

πŸ“₯ Unduh Aplikasi: Download MyGallery.apk

πŸ“‚ Source Code: https://github.com/Danar1111/MyGallery-Kotlin.git


Komentar

Postingan populer dari blog ini

Tugas 9

Tugas 5

Tugas 1 PPB A