PPB-A ETS MyGalery Apps
Nama : Danar Sodik Priyambodo
NRP : 5025211145
PBKK-A
Deskripsi Aplikasi — MyGallery (Aplikasi Galeri Pribadi)
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.
Aplikasi ini memungkinkan pengguna untuk:
- Menambahkan gambar dari galeri maupun kamera.
- Melihat foto-foto dalam tampilan grid.
- Melihat detail foto secara fullscreen.
- Menyimpan foto secara lokal agar tetap ada meski aplikasi ditutup.
- Memilih beberapa foto sekaligus dan menghapusnya (fitur tambahan).
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.type = "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 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() 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() }
Kelebihan Aplikasi
- Ringan dan cepat
- Mendukung mode terang dan gelap
- Desain estetik dengan card view dan animasi FAB
- Multi-Select dan Delete mempermudah pengelolaan foto
Catatan
- Penyimpanan masih bersifat lokal
- Jika gambar dihapus dari perangkat, tidak dapat ditampilkan ulang
- Multi-Select disarankan menggunakan ActionMode untuk versi selanjutnya
Komentar
Posting Komentar