Android: ViewPager PageTransformer seperti pada aplikasi Kurio

disclaimer: saya belum pernah mengakses source code Kurio maupun melakukan reverse engineering terhadap aplikasi tersebut.

Postingan kali ini, saya ingin share gimana caranya membuat animasi page transition seperti di aplikasi Kurio.
Di aplikasi kurio, ada dua jenis animasi page transition:
1. saat kita melakukan navigasi dari satu title berita ke title berita yang lain. animasi yang dilakukan adalah dengan merotasi halaman dengan pivot ujung kanan-bawah halaman.
2. saat kita membaca satu berita dari satu halaman ke halaman berikutnya. animasi yang dilakukan adalah dengan zoom in halaman berikutnya.

nah, untuk postingan bagian pertama ini saya hanya akan menunjukkan cara implementasi animasi jenis yang kedua.
Di android, jika kita menggunakan ViewPager dan ingin membuat animasi yang berbeda dengan animasi default untuk screen sliding antar pagenya, kita bisa melakukan dengan men-set PageTransformer; untung bagi kita, karena cara menggunakan interface PageTransformer ini juga sudah ada contohnya[1].

Permsalahannya, secara default ViewPager akan “menata” pages yang ada di dalamnya secara horizontal; Jadi kita harus melakukan sedikit modifikasi sehingga page menjadi tersusun secara vertical. Tidak perlu repot, ternyata sudah ada yang melakukan sedikit modifikasi sehingga ViewPager bisa tersusun secara vertical disini.

Selanjutnya, yang kita perlukan adalah page transformer sehingga page selanjutnya seakan-akan dimunculkan dari belakang layar sambil di zoom in. Berikut implementasi yang saya buat:

public class DepthPageTransformer implements PageTransformer {
    private static final float MIN_SCALE = 0.75f;

    public void transformPage(View view, float position) {
        int pageWidth = view.getWidth();
        int pageHeight = view.getHeight();

        if (position < -1) { // [-Infinity,-1)
            view.setAlpha(0);

        } else if (position <= 0) { // [-1,0]
            view.setAlpha(1);
            view.setTranslationX(0);
            view.setScaleX(1);
            view.setScaleY(1);

        } else if (position <= 1) { // (0,1]
            // Fade the page out.
//            view.setAlpha(1 - position);

            view.setTranslationY(pageHeight * -position);

            float scaleFactor = MIN_SCALE
                    + (1 - MIN_SCALE) * (1 - Math.abs(position));
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);

        } else { // (1,+Infinity]
            view.setAlpha(0);
        }
    }
}

dengan men-set PageTransformer dalam view Pager seperti ini:

mPager.setPageTransformer(true, new DepthPageTransformer());

kita bisa menghasilkan animasi transisi seperti yang ada di aplikasi Kurio, berikut demo aplikasinya:

referensi:
1. http://developer.android.com/training/animation/screen-slide.html#pagetransformer

Pemiloe! Aplikasi Pemilu 2014 (Top 10 Finalis Hackathon Code for Vote)

Akhir pekan yang lalu, tanggal 8-9 Maret 2014, saya memaksakan diri untuk mengikuti hackathon di Telkom BDV. Acara hackathon dengan tema pemilu 2014 (Code for Vote) ini diadakan oleh Perludem dan RumahPemilu.org; Tak disangka, ternyata pesertanya sangat banyak hingga 200 orang; awalnya saya agak pesimis karena mungkin saya salah satu dari sedikit peserta yang sendirian tidak dengan team. Saya bahkan sempat berfikir untuk pulang saja menemani Istri yang lagi sakit dan main sama Ahmad, anak kami :)

Tapi, karena sudah membulatkan tekat dan sudah izin istri jauh-jauh hari untuk berusaha dan berharap bisa menang di aplikasi ini (sehingga bisa bayar cicilan rumah dan beli obat untuk istri); saya memilih untuk melanjutkan dan menyelesaikan aplikasi ini dalam waktu kurang dari 24 jam; ya, saya merasa berusaha cukup keras di sini hingga hampir tidak tidur sama sekali untuk menyelesaikan aplikasinya mulai nol.

Meskipun masuk dalam 10 finalis, pada akhirnya aplikasi yang saya buat tidak termasuk top 5 apps yang mendapatkan hadiah; Sedih memang, tapi keputusan juri sudah final. Meski demikian, Saya tetap berencana mempublikasikan aplikasi yang sudah saya buat di Google Play Store, BlackBerry World, dan Nokia Ovi Store.

Pemiloe! Aplikasi Pemilu 2014

Aplikasi yang saya buat saya beri nama Pemiloe!, aplikasi ini bermanfaat memberikan informasi kepada pengguna mengenai partai politik peserta pemilu dengan detail, disamping itu dengan teknik geofencing aplikasi ini juga akan menampilkan daftar caleg dari satu partai di tempat penguna aplikasi berada. Misalnya, saat saya menjalankan aplikasi ini di Jakarta, kemudian saya mengakses partai Nasdem atau PKS misalnya, maka saya bisa melihat daftar caleg partai Nasdem atau PKS untuk DPR di daerah Jakarta tersebut; Selanjutnya pengguna bisa melihat detail dari profile caleg tersebut seperti tanggal lahir, pasangan, tempat tinggal, riwayat pendidikan, riwayat pekerjaan dan lain-lain.

berikut beberapa screenshot dari aplikasi yang saya buat:

This slideshow requires JavaScript.

Yang ingin mendownload aplikasinya, Insyaa Allah besok pagi sudah bisa di Unduh di Google Play Store Alhamdulillah aplikasi Pemiloe! sudah bisa didownload di link bawah ini :)


Get it on Google Play

Java API Design Checklist

Muhammad Hakim A:

important note for java developer

Originally posted on The Amiable API:

There are many different rules and tradeoffs to consider during Java API design. Like any complex task, it tests the limits of our attention and memory. Similar to the pilots’ pre-flight checklist, this list helps software designers remember obvious and not so obvious rules while designing Java APIs. It is a complement to and intended to be used together with the API Design Guidelines.

We also have some before-and-after code examples to show how this list can help you remember overlooked design requirements, spot mistakes, identify less-than-optimal design choices and opportunities for improvements.

Click the [explain] link next to a checklist item (where available) for details about the rationale, examples, design tradeoffs or other limitations of applicability.

This list uses the following conventions:

   (Do) verb...  - Indicates the required design
    Favor...     - Indicates the best of several design alternatives
    Consider...  - Indicates a possible design improvement
    Avoid...

View original 2.461 more words

Rename Multiple Files dengan shell script

Jadi, saya punya list file berikut (di list menggunakan command ls):

1.nasdem.png
1.nasdem@2x.png
10.hanura.png
10.hanura@2x.png
11.damai.png
11.damai@2x.png
12.aceh.png
12.aceh@2x.png
13.aceh.png
13.aceh@2x.png
14.pbb.png
14.pbb@2x.png
15.pkp.png
15.pkp@2x.png
2.pkb.png
2.pkb@2x.png
3.pks.png
3.pks@2x.png
4.pdip.png
4.pdip@2x.png
5.golkar.png
5.golkar@2x.png
6.gerindra.png
6.gerindra@2x.png
7.demokrat.png
7.demokrat@2x.png
8.pan.png
8.pan@2x.png
9.ppp.png
9.ppp@2x.png

kemudian saya ingin menghapus nama-nama partai dari nama file tersebut sehingga, misalnya jika nama file awalnya adalah 1.nasdem.png akan dirubah menjadi 1.png, atau jika nama filenya 3.pks@2x.png akan dirubah menjadi 3@2x.png. Salah seorang kolega kantor menyarankan untuk menggunakan explorer (finder di mac), tapi saya tertarik untuk menggunakan terminal/shell script. Setelah mencari-cari caranya, akhirnya saya menggunakan cara berikut (menggunakan awk):

1. ini untuk merename file-file yang berakhiran @2x.png

ls | awk '/[0-9]+/{old=$0;gsub(/\..*@2x\./,"@2x.",$0);system("mv \""old"\" "$0)}'

2. untuk file yang tidak berakhiran @2x.png langsung seperti ini

ls | awk '/[0-9]+/{old=$0;gsub(/\..*\./,".",$0);system("mv \""old"\" "$0)}'

penjelasannya kurang lebih seperti ini:
$> ls

ini me-list semua daftar file yang ada di direktori, kemudian di pipeline ke awk
>ls | awk
bagian ini
/[0-9]+/
mengharuskan file diawali dengan digit, setelah itu:
$>ls | awk ‘/[0-9]+/{old=$0;gsub(/\..*\./,”.”,$0);
simpan nama file dalam variable old, dan substitusi semua karakter diantara dua titik dengan sebuah titik. langkah terakhir rename file dengan perintah mv
>ls | awk ‘/[0-9]+/{old=$0;gsub(/\..*\./,”.”,$0);system(“mv \””old”\” “$0)}’

jadidah kerename semua filenya:
1.png
10.png
10@2x.png
11.png
11@2x.png
12.png
12@2x.png
13.png
13@2x.png
14.png
14@2x.png
15.png
15@2x.png
1@2x.png
2.png
2@2x.png
3.png
3@2x.png
4.png
4@2x.png
5.png
5@2x.png
6.png
6@2x.png
7.png
7@2x.png
8.png
8@2x.png
9.png
9@2x.png

Preserving Keystrokes

Saya suka dengan ide Scott Hanselman di blognya. Saya kira alasan yang sama saya gunakan, karena saya memiliki waktu yang terbatas, maka saya berusaha me-preserve pengetahuan yang saya miliki, salah satunya dengan menuliskannya di blog. Salah satu alasannya adalah agar saya tidak berulang-ulang menuliskan hal sama jika seseorang bertanya tentang sesuatu yang saya ketahui. Jadi, ketika seseorang bertanya pertanyaan yang sama, saya bisa mereferkannya ke blog yang sudah saya tulis.

Saya beruntung karena dalam agama Islam dikenal apa yang disebut amal jariyah, yaitu amal yang terus berbuah pahalanya meskipun kita telah meninggal selama amal tersebut bermanfaat bagi orang lain. Nabi Muhammad SAW tentunya adalah manusia yang paling banyak amalnya, karena semua ajaran Islam disampaikan dan dicontohkan oleh beliau. Dan apa yang membuat orang-orang terdahulu (misal. Ulama/Ilmuwan) tetap dikenang adalah melalui karya-karyanya berupa buku-buku (kitab) yang telah beliau semuanya tulis; jadi ketika seseorang pada masa ini bertanya tentang masalah Fiqih misalnya, dia bisa bertanya kepada Imam Syafi’i rahimahullah, maka Imam madzhab Syafi’i tersebut tidak perlu lagi menuliskan jawabannya kepada penanya tersebut, karena beliau sudah meninggal lebih daru seribu tahun yang lalu, tapi beliau bisa secara tidak langsung me-refer si penanya pada “keystroke/penstroke” yang sudah beliau preserve melalu karya beliau, al-Umm misalnya.

Saya memilih untuk meng-hosting blog ini juga di wordpress.com bukan dengan hosting sendiri juga salah satu alasannya adalah semoga dengan demikian, selama wordpress.com masih ada, tulisa-tulisan saya juga masih bisa dibaca meskipun saya sendiri bisa jadi sudah meninggal. Dan semoga, dengan demikian saya masih dapat memperoleh aliran pahala dari amal jariyah ini.

aamiin