Membuat tampilan jam interaktif

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

Pelajaran ini menunjukkan cara mengimplementasikan tampilan jam interaktif dengan terlebih dahulu membuat gaya tampilan jam, kemudian mengimplementasikan penanganan gestur.

Catatan: Sebelum mulai mengembangkan tampilan jam interaktif, sebaiknya baca Tampilan Jam Interaktif terlebih dahulu.

Menangani peristiwa ketukan

Ketika membuat gaya tampilan jam interaktif, hal pertama yang harus dilakukan aplikasi adalah memberi tahu sistem bahwa tampilan jam menerima peristiwa ketukan. 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 mendeteksi ketukan pada tampilan jam, sistem akan memicu metode WatchFaceService..Engine.onTapCommand(). Ganti metode ini dalam implementasi WatchFaceService.Engine Anda untuk menginisialisasi tindakan yang ingin dilakukan, seperti menampilkan penghitungan langkah mendetail atau mengubah tema tampilan jam. Cuplikan kode dalam Menangani Gestur menunjukkan contoh implementasi semacam itu.

Menangani gestur

Untuk memberikan pengalaman pengguna yang konsisten, sistem mencadangkan gestur seperti tarik dan tekan-lama untuk elemen UI sistem. Oleh karena itu, sistem tidak mengirim peristiwa sentuh mentah ke tampilan jam. Sebagai gantinya, sistem meneruskan perintah spesifik ke metode onTapCommand().

Sistem akan mengirim perintah pertama, TAP_TYPE_TOUCH, saat pengguna mulai menyentuh layar. Peristiwa ini memungkinkan Anda untuk memberikan respons visual saat pengguna menyentuh layar. Aplikasi Anda tidak akan meluncurkan UI saat peristiwa ini dipicu. Meluncurkan UI akan mencegah peristiwa tarik membuka peluncur aplikasi, kekelaman setelan, dan aliran notifikasi.

Sebelum mengirim perintah berikutnya, sistem akan menentukan apakah kontak yang diterima berupa ketukan tunggal, yang merupakan satu-satunya gestur yang diizinkan. Jika pengguna langsung mengangkat jarinya, sistem akan menentukan bahwa yang terjadi adalah ketukan tunggal, lalu meneruskan peristiwa TAP_TYPE_TAP. Jika pengguna tidak langsung mengangkat jarinya, sistem akan meneruskan peristiwa TAP_TYPE_TOUCH_CANCEL. Setelah peristiwa TAP_TYPE_TOUCH_CANCEL dipicu, pengguna tidak dapat memicu peristiwa TAP_TYPE_TAP sampai mereka membuat sentuhan baru di layar.

Contoh berikut menunjukkan cara mengimplementasikan peristiwa ketukan 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 peristiwa yang terjadi, lalu memberikan respons yang sesuai. Jika peristiwa itu adalah sentuhan awal oleh jari pengguna, aplikasi akan menampilkan respons visual. Jika pengguna langsung mengangkat jarinya setelah menyentuh layar, aplikasi akan melakukan tindakan di tempat yang diketuk pengguna. Jika pengguna menyentuh lama dengan jarinya, aplikasi tidak akan melakukan apa pun.