Register now for Android Dev Summit 2019!

Buat tampilan jam interaktif

Pengguna bisa berinteraksi dengan tampilan jam Anda dalam berbagai cara. Misalnya, pengguna dapat menge-tap tampilan jam untuk mengetahui lagu yang sedang diputar, atau untuk melihat agenda hari itu. Wear OS by Google memungkinkan tampilan jam menerima gestur satu tap di lokasi tertentu pada tampilan jam, selama tidak ada elemen UI lain yang juga merespons gestur itu.

Pembelajaran ini mengajarkan Anda cara mengimplementasikan tampilan jam interaktif dengan terlebih dahulu membuat gaya tampilan jam, kemudian mengimplementasikan penanganan gestur.

Catatan: Sebelum memulai pekerjaan pengembangan pada tampilan jam interaktif, Anda harus terlebih dahulu membaca tentang Tampilan Jam Interaktif.

Menangani event tap

Saat membuat sebuah gaya tampilan jam interaktif, hal pertama yang harus dilakukan aplikasi adalah memberi tahu sistem bahwa tampilan jam menerima event tap. Contoh berikut menunjukkan cara melakukannya:

Kotlin

setWatchFaceStyle(WatchFaceStyle.Builder(service)
        .setAcceptsTapEvents(true)
        // other style customizations
        .build())

Java

setWatchFaceStyle(new WatchFaceStyle.Builder(service)
        .setAcceptsTapEvents(true)
        // other style customizations
        .build());

Jika sistem mendeteksi tap pada tampilan jam, sistem akan memicu metode WatchFaceService.Engine.onTapCommand(). Ganti metode ini dalam implementasi WatchFaceService.Engineuntuk memulai aksi yang ingin Anda lakukan, seperti menampilkan hitungan langkah secara detail atau mengubah tema tampilan jam. Cuplikan kode dalam Menangani Gestur menunjukkan contoh implementasi ini.

Menangani gestur

Untuk memberikan pengalaman pengguna yang konsisten, sistem menyimpan gestur seperti tarik dan tekan-lama untuk elemen UI sistem. Oleh karena itu, sistem tidak mengirim event sentuh mentah ke tampilan jam. Sebaliknya, sistem meneruskan perintah khusus ke metode onTapCommand().

Sistem mengirim perintah pertama, TAP_TYPE_TOUCH, pada awal pengguna menyentuh layar. Event ini memungkinkan Anda memberikan umpan balik visual kepada pengguna saat disentuh. Aplikasi Anda seharusnya tidak meluncurkan UI saat event ini terpicu. Peluncuran UI akan mencegah event tarik membuka launcher aplikasi, menu setelan, dan deretan notifikasi.

Sebelum mengirim perintah berikutnya, sistem akan menilai apakah kontak berupa satu tap, yang merupakan satu-satunya gestur yang diizinkan. Jika pengguna langsung mengangkat jarinya, sistem memutuskan bahwa terjadi satu tap, dan meneruskan event TAP_TYPE_TAP. Jika pengguna tidak langsung mengangkat jarinya, sistem meneruskan event TAP_TYPE_TOUCH_CANCEL. Setelah pengguna memicu event TAP_TYPE_TOUCH_CANCEL, mereka tidak bisa memicu event TAP_TYPE_TAP hingga mereka melakukan kontak baru dengan layar.

Contoh berikut menunjukkan cara mengimplementasikan event tap pada tampilan jam:

Kotlin

override fun onTapCommand(@TapType tapType: Int, x: Int, y: Int, eventTime: Long) {
    when (tapType) {
        WatchFaceService.TAP_TYPE_TAP -> {
            hideTapHighlight()
            if (withinTapRegion(x, y)) {
                // Implement the tap action
                // (e.g. show detailed step count)
                onWatchFaceTap()
            }
        }

        WatchFaceService.TAP_TYPE_TOUCH ->
            if (withinTapRegion(x, y)) {
                // Provide visual feedback of touch event
                startTapHighlight(x, y, eventTime)
            }

        WatchFaceService.TAP_TYPE_TOUCH_CANCEL -> hideTapHighlight()

        else -> super.onTapCommand(tapType, x, y, eventTime)
    }
}

Java

@Override
public void onTapCommand(
       @TapType int tapType, int x, int y, long eventTime) {
    switch (tapType) {
        case WatchFaceService.TAP_TYPE_TAP:
            hideTapHighlight();
            if (withinTapRegion(x, y)) {
                // Implement the tap action
                // (e.g. show detailed step count)
                onWatchFaceTap();
            }
            break;

        case WatchFaceService.TAP_TYPE_TOUCH:
            if (withinTapRegion(x, y)) {
                // Provide visual feedback of touch event
                startTapHighlight(x, y, eventTime);
            }
            break;

        case WatchFaceService.TAP_TYPE_TOUCH_CANCEL:
            hideTapHighlight();
            break;

        default:
            super.onTapCommand(tapType, x, y, eventTime);
            break;
    }
}

Dalam contoh ini, aplikasi menentukan jenis event yang terjadi, kemudian meresponsnya secara sesuai. Jika event tersebut merupakan kontak awal oleh jari pengguna, aplikasi akan menampilkan umpan balik visual. Jika event tersebut adalah pengangkatan langsung jari setelah kontak, ia melakukan aksi di tempat yang di-tap pengguna. Jika event tersebut merupakan kontak lama oleh jari, aplikasi tidak melakukan apa pun.