---
title: "Hide and Reveal Areas"
canonical_url: "https://www.nutrient.io/guides/android/samples/hide-and-reveal-areas-kotlin/"
md_url: "https://www.nutrient.io/guides/android/samples/hide-and-reveal-areas-kotlin.md"
last_updated: "2025-07-02T00:00:00.000Z"
description: "Select areas on a page to hide or reveal content."
---

# Hide and Reveal Areas

Select areas on a page to hide or reveal content.

[Get Started](https://www.nutrient.io/sdk/android/getting-started.md)

[All Samples](https://www.nutrient.io/guides/android/samples.md)

[Download](https://www.nutrient.io/guides/android/downloads.md)

[Launch Demo](https://www.nutrient.io/demo/)

---

```kotlin

/*
 *   Copyright © 2020-2026 PSPDFKit GmbH. All rights reserved.
 *
 *   The PSPDFKit Sample applications are licensed with a modified BSD license.
 *   Please see License for details. This notice may not be removed from this file.
 */

package com.pspdfkit.catalog.examples.kotlin

import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.ColorFilter
import android.graphics.Matrix
import android.graphics.Paint
import android.graphics.PixelFormat
import android.graphics.RectF
import android.net.Uri
import android.view.Menu
import android.view.MenuItem
import android.view.MotionEvent
import androidx.annotation.IntRange
import androidx.annotation.UiThread
import androidx.lifecycle.lifecycleScope
import com.pspdfkit.annotations.Annotation
import com.pspdfkit.annotations.AnnotationType
import com.pspdfkit.annotations.SquareAnnotation
import com.pspdfkit.catalog.R
import com.pspdfkit.catalog.SdkExample
import com.pspdfkit.catalog.tasks.ExtractAssetTask.extract
import com.pspdfkit.configuration.activity.PdfActivityConfiguration
import com.pspdfkit.configuration.activity.ThumbnailBarMode
import com.pspdfkit.document.PdfDocument
import com.pspdfkit.preferences.PSPDFKitPreferences
import com.pspdfkit.ui.PdfActivity
import com.pspdfkit.ui.PdfActivityIntentBuilder
import com.pspdfkit.ui.drawable.PdfDrawable
import com.pspdfkit.ui.drawable.PdfDrawableProvider
import com.pspdfkit.utils.Size
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import org.json.JSONObject
import java.util.EnumSet

/**
 * This example allow users to select areas to hide/reveal on a page.
 */
class HideRevealAnnotationsCreationExample(context: Context) :
    SdkExample(context, R.string.hideRevealAnnotationsCreationTitle, R.string.hideRevealAnnotationsCreationDescription) {
    override fun launchExample(context: Context, configuration: PdfActivityConfiguration.Builder) {
        configuration
            // Turn off saving, so we have the clean original document every time the example is launched..autosaveEnabled(false)
            // Disable thumbnail bar..setThumbnailBarMode(ThumbnailBarMode.THUMBNAIL_BAR_MODE_NONE)
            // Disable annotation copy and paste..copyPastEnabled(false)
            // Disable text selection..textSelectionEnabled(false)

        // The annotation creator written into newly created annotations. If not set, or set to null
        // a dialog will normally be shown when creating an annotation, asking you to enter a name.
        // We are going to skip this part and set it as "John Doe" only if it was not yet set.
        if (!PSPDFKitPreferences.get(context).isAnnotationCreatorSet) {
            PSPDFKitPreferences.get(context).setAnnotationCreator("John Doe")
        }
        // Extract the document from the assets.
        extract("Classbook.pdf", title, context) { documentFile ->
            val intent =
                PdfActivityIntentBuilder.fromUri(context, Uri.fromFile(documentFile)).configuration(configuration.build()).activityClass(HideRevealAnnotationsCreationActivity::class).build()
            context.startActivity(intent)
        }
    }
}

class HideRevealAnnotationsCreationActivity : PdfActivity() {
    /**
     * A square annotation representing an area to hide on the page. Once the document is loaded,
     * we extract any existing hide area annotation from the document and store its reference here. When no
     * hide annotation is in the document, this reference holds `null`.
     */
    private var hideArea: SquareAnnotation? = null

    /**
     * A square annotation representing an area to reveal on the page. Once the document is loaded,
     * we extract any existing reveal annotation from the document and store its reference here. When no
     * reveal annotation is in the document, this reference holds `null`.
     */
    private var revealArea: SquareAnnotation? = null

    /**
     * To hide the entire page around the reveal annotation, we use a custom drawable provider that serves
     * drawables to the [PdfFragment]. We keep reference to it, so we can remove the drawable provider upon removing
     * the reveal annotation from the document.
     */
    private var revealAreaDrawableProvider: PdfDrawableProvider? = null

    /** This drawable implements the drawing logic for covering the page in black. */
    private var revealAreaDrawable: RevealAreaDrawable? = null

    /**
     * Create the two buttons for handling hide and reveal areas.
     */
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        super.onCreateOptionsMenu(menu)
        // Loading the document is an asynchronous process. Depending on the lifecycle state of the activity,
        // the document might not be loaded when this method is called, in which case we don't populate the menu.
        if (document == null) {
            return false
        }

        menu.clear()
        // Set hide button state.
        if (hideArea == null) {
            // Annotation is not present.
            val addHideAreaItem = menu.add(0, HIDE_ITEM_ID, 0, "Hide Area")
            showWithText(addHideAreaItem)
        } else {
            // Annotation is present.
            val resetHideAreaItem = menu.add(0, RESET_HIDE_ITEM_ID, 0, "Reset Hide Area")
            showWithText(resetHideAreaItem)
        }

        // Set reveal button state.
        if (revealArea == null) {
            // Annotation is not present.
            val addRevealAreaItem = menu.add(0, REVEAL_ITEM_ID, 1, "Reveal Area")
            showWithText(addRevealAreaItem)
        } else {
            // Annotation is present.
            val resetRevealAreaItem = menu.add(0, RESET_REVEAL_ITEM_ID, 1, "Reset Reveal Area")
            showWithText(resetRevealAreaItem)
        }
        return true
    }

    /** Helper to show buttons with text. */
    private fun showWithText(menuItem: MenuItem) {
        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM or MenuItem.SHOW_AS_ACTION_WITH_TEXT)
    }

    /** Set the corresponding action for every button in the toolbar. */
    override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
        HIDE_ITEM_ID -> {
            hideArea()
            true
        }

        RESET_HIDE_ITEM_ID -> {
            resetHideArea()
            true
        }

        REVEAL_ITEM_ID -> {
            revealArea()
            true
        }

        RESET_REVEAL_ITEM_ID -> {
            resetRevealArea()
            true
        }

        else -> {
            super.onOptionsItemSelected(item)
        }
    }

    /** Adds a drawable provider which will serve the reveal area drawable for covering the page in black. */
    private fun addRevealAreaDrawableProvider(revealArea: SquareAnnotation?) {
        if (revealArea!= null) {
            revealAreaDrawableProvider =
                object : PdfDrawableProvider() {
                    override suspend fun getDrawablesForPage(
                        context: Context,
                        document: PdfDocument,
                        @IntRange(from = 0) pageIndex: Int,
                    ): List<PdfDrawable> = mutableListOf<PdfDrawable>().apply {
                        if (pageIndex == revealArea.pageIndex) {
                            val drawable = RevealAreaDrawable(document.getPageSize(pageIndex), revealArea)
                            revealAreaDrawable = drawable
                            add(drawable)
                        }
                    }
                }
            revealAreaDrawableProvider?.let {
                requirePdfFragment().addDrawableProvider(it)
            }
        }
    }

    @UiThread
    override fun onDocumentLoaded(document: PdfDocument) {
        lifecycleScope.launch {
            // Restore the state of previously added annotations if any.
            if (hideArea == null) {
                hideArea = getCustomAnnotationIfPresent(document, HIDE_AREA_KEY)
            }
            if (revealArea == null) {
                revealArea = getCustomAnnotationIfPresent(document, REVEAL_AREA_KEY)
                addRevealAreaDrawableProvider(revealArea)
            }
            invalidateOptionsMenu()
        }
    }

    /** Returns any annotation with the `customData` key set to `true`, or null if no such annotation exists. */
    private suspend fun getCustomAnnotationIfPresent(document: PdfDocument, customData: String): SquareAnnotation? {
        document.annotationProvider.getAllAnnotationsOfType(EnumSet.of(AnnotationType.SQUARE)).forEach {
            if (it.customData?.optBoolean(customData) == true) {
                return it as SquareAnnotation
            }
        }

        return null
    }

    @SuppressLint("Range")
    private fun hideArea() {
        // Initial rect for the hide area annotation.
        val rect = RectF(360f, 632.5f, 561f, 80.5f)
        SquareAnnotation(pageIndex, rect).apply {
            hideArea = this
            fillColor = Color.BLACK
            customData =
                JSONObject().apply {
                    put(HIDE_AREA_KEY, true)
                }
            addAnnotationToDocument(this)
            invalidateOptionsMenu()
        }
    }

    private fun resetHideArea() {
        val document = document?: return
        val hideArea = hideArea?: return
        runBlocking { document.annotationProvider.removeAnnotationFromPage(hideArea) }
        this.hideArea = null
        invalidateOptionsMenu()
    }

    @SuppressLint("Range")
    private fun revealArea() {
        // Initial rect for the reveal area annotation.
        val rect = RectF(51f, 630f, 360f, 462f)
        SquareAnnotation(pageIndex, rect).apply {
            revealArea = this
            fillColor = Color.TRANSPARENT
            customData =
                JSONObject().apply {
                    put(REVEAL_AREA_KEY, true)
                }
            addAnnotationToDocument(this)
            addRevealAreaDrawableProvider(this)
            invalidateOptionsMenu()
        }
    }

    private fun resetRevealArea() {
        val document = document?: return
        val revealArea = revealArea?: return
        revealAreaDrawableProvider?. let {
            requirePdfFragment().removeDrawableProvider(it)
            val thumbnailGridView = pspdfKitViews.thumbnailGridView
            thumbnailGridView?.removeDrawableProvider(it)
            revealAreaDrawableProvider = null
        }
        runBlocking { document.annotationProvider.removeAnnotationFromPage(revealArea) }
        this.revealArea = null
        invalidateOptionsMenu()
    }

    /**
     * Whenever there's a touch event and the reveal area is selected, we turn it transparent for
     * simpler annotation placement.
     */
    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        val revealArea = revealArea
        val revealAreaDrawable = revealAreaDrawable
        if (revealArea!= null && revealAreaDrawable!= null) {
            if (ev.actionMasked == MotionEvent.ACTION_UP) {
                // Set it fully opaque.
                revealAreaDrawable.alpha = 255
            } else if (ev.actionMasked == MotionEvent.ACTION_DOWN && requirePdfFragment().selectedAnnotations.contains(revealArea)) {
                // Set alpha channel at 80%.
                revealAreaDrawable.alpha = 204
            }
        }
        return super.dispatchTouchEvent(ev)
    }

    /**
     * Add the annotation to the document, and update the annotation in the UI.
     */
    private fun addAnnotationToDocument(annotation: com.pspdfkit.annotations.Annotation) {
        requirePdfFragment().addAnnotationToPage(annotation, false)
    }

    /** Custom drawable that implements the logic for covering the area around the reveal area in black. */
    internal class RevealAreaDrawable(pageSize: Size, private val revealArea: Annotation) : PdfDrawable() {
        private val paint = Paint()
        private val pageCoordinates: RectF = RectF(0f, pageSize.height, pageSize.width, 0f)

        /** Auxiliary field used for keeping the screen coordinates of a page. */
        private val screenCoordinates = RectF()

        /** Auxiliary field used for keeping the screen coordinates of an annotation. */
        private val annotationScreenCoordinates = RectF()

        /** Auxiliary field used for keeping the page coordinates of an annotation. */
        private val annotationPageCoordinates = RectF()

        init {
            paint.color = Color.BLACK
            paint.style = Paint.Style.FILL
            paint.alpha = 255
        }

        /**
         * The annotation bounding box is first decreased to a narrower rectangle to make sure
         * there are no gaps in the black area. The rectangle is then converted from page coordinates
         * to screen coordinates and as a final step four black rectangles will be drawn around the
         * reveal area that will cover the whole page to give a reveal area effect.
         */
        override fun draw(canvas: Canvas) {
            revealArea.getBoundingBox(annotationPageCoordinates)
            // Decrease the transparent hole to make sure there are no gaps.
            // Using small values to make the rectangle narrower.
            // The `dy` value is negative because the annotation is in page coordinates.
            annotationPageCoordinates.inset(1f, -1f)
            getPdfToPageTransformation().mapRect(annotationScreenCoordinates, annotationPageCoordinates)
            val bounds = bounds
            // Left.
            canvas.drawRect(
                bounds.left.toFloat(),
                bounds.top.toFloat(),
                annotationScreenCoordinates.left,
                bounds.bottom.toFloat(),
                paint,
            )
            // Top.
            canvas.drawRect(
                annotationScreenCoordinates.left,
                bounds.top.toFloat(),
                annotationScreenCoordinates.right,
                annotationScreenCoordinates.top,
                paint,
            )
            // Right
            canvas.drawRect(
                annotationScreenCoordinates.right,
                bounds.top.toFloat(),
                bounds.right.toFloat(),
                bounds.bottom.toFloat(),
                paint,
            )
            // Bottom
            canvas.drawRect(
                annotationScreenCoordinates.left,
                annotationScreenCoordinates.bottom,
                annotationScreenCoordinates.right,
                bounds.bottom.toFloat(),
                paint,
            )
        }

        /**
         * Nutrient calls this method every time the page was moved or resized on screen.
         * It will provide a fresh transformation for calculating screen coordinates from
         * PDF coordinates.
         */
        override fun updatePdfToViewTransformation(matrix: Matrix) {
            super.updatePdfToViewTransformation(matrix)
            updateScreenCoordinates()
        }

        private fun updateScreenCoordinates() {
            // Calculate the screen coordinates by applying the PDF-to-view transformation.
            getPdfToPageTransformation().mapRect(screenCoordinates, pageCoordinates)
            // Rounding out ensure no clipping of content.
            val bounds = bounds
            screenCoordinates.roundOut(bounds)
            setBounds(bounds)
        }

        @UiThread
        override fun setAlpha(alpha: Int) {
            paint.alpha = alpha
            // Drawable invalidation is only allowed from a UI-thread.
            invalidateSelf()
        }

        @UiThread
        override fun setColorFilter(colorFilter: ColorFilter?) {
            paint.colorFilter = colorFilter
            // Drawable invalidation is only allowed from a UI-thread.
            invalidateSelf()
        }

        @Deprecated("Deprecated in Java")
        override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
    }

    companion object {
        private const val HIDE_ITEM_ID = 1234
        private const val RESET_HIDE_ITEM_ID = 1235
        private const val REVEAL_ITEM_ID = 1236
        private const val RESET_REVEAL_ITEM_ID = 1237
        private const val HIDE_AREA_KEY = "hideArea"
        private const val REVEAL_AREA_KEY = "revealArea"
    }
}

```

This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.

---

## Related pages

- [Add LTV to Existing Signature](/guides/android/samples/add-ltv-to-existing-signature-kotlin.md)
- [AES Encrypted File](/guides/android/samples/aes-encrypted-file-java.md)
- [AI Assistant (Multiple Documents, Compose)](/guides/android/samples/ai-assistant-multiple-documents-compose-kotlin.md)
- [AI Assistant (Multiple Documents, ViewPager)](/guides/android/samples/ai-assistant-multiple-documents-viewpager-kotlin.md)
- [AI Assistant (Single Document)](/guides/android/samples/ai-assistant-single-document-kotlin.md)
- [Annotation Configuration](/guides/android/samples/annotation-configuration-kotlin.md)
- [Annotation Creation](/guides/android/samples/annotation-creation-kotlin.md)
- [Annotation Flags](/guides/android/samples/annotation-flags-kotlin.md)
- [Annotation Overlay](/guides/android/samples/annotation-overlay-java.md)
- [Annotation Rendering](/guides/android/samples/annotation-rendering-kotlin.md)
- [Annotation Selection Styling](/guides/android/samples/annotation-selection-styling-kotlin.md)
- [Annotation Sidebar](/guides/android/samples/annotation-sidebar-kotlin.md)
- [Annotations with Transparency](/guides/android/samples/annotations-with-transparency-kotlin.md)
- [Application Policy](/guides/android/samples/application-policy-kotlin.md)
- [Bookmark Highlighting](/guides/android/samples/bookmark-highlighting-kotlin.md)
- [Compose Image Document](/guides/android/samples/compose-image-document-kotlin.md)
- [Compose Navigation](/guides/android/samples/compose-navigation-kotlin.md)
- [Construction Floor Plan](/guides/android/samples/construction-floor-plan-kotlin.md)
- [Custom ActionBar Actions](/guides/android/samples/custom-actionbar-actions-kotlin.md)
- [Custom Activity Form Editing](/guides/android/samples/custom-activity-form-editing-java.md)
- [Custom Activity Toolbars](/guides/android/samples/custom-activity-toolbars-java.md)
- [Custom Annotation Creation Toolbar](/guides/android/samples/custom-annotation-creation-toolbar-java.md)
- [Custom Annotation Inspector](/guides/android/samples/custom-annotation-inspector-java.md)
- [Custom Data Provider](/guides/android/samples/custom-data-provider-kotlin.md)
- [Custom Download Dialog](/guides/android/samples/custom-download-dialog-java.md)
- [Custom Electronic Signature](/guides/android/samples/custom-electronic-signature-java.md)
- [Custom Form Highlight Color](/guides/android/samples/custom-form-highlight-color-java.md)
- [Custom Layout](/guides/android/samples/custom-layout-kotlin.md)
- [Custom Main Toolbar](/guides/android/samples/custom-main-toolbar-kotlin.md)
- [Custom Note Hinter](/guides/android/samples/custom-note-hinter-kotlin.md)
- [Custom Outline Provider](/guides/android/samples/custom-outline-provider-kotlin.md)
- [Custom Page Templates](/guides/android/samples/custom-page-templates-java.md)
- [Custom Search UI (Compose)](/guides/android/samples/custom-search-ui-compose-kotlin.md)
- [Custom Search UI (Views)](/guides/android/samples/custom-search-ui-views-java.md)
- [Custom Sharing Dialog](/guides/android/samples/custom-sharing-dialog-java.md)
- [Custom Sharing Menu](/guides/android/samples/custom-sharing-menu-java.md)
- [Custom Stamp Annotations](/guides/android/samples/custom-stamp-annotations-java.md)
- [Custom Toolbar Grouping](/guides/android/samples/custom-toolbar-grouping-java.md)
- [Digital Signature (Basic)](/guides/android/samples/digital-signature-basic-kotlin.md)
- [Digital Signature (Manual)](/guides/android/samples/digital-signature-manual-kotlin.md)
- [Digital Signature (Third-Party)](/guides/android/samples/digital-signature-third-party-kotlin.md)
- [Digital Signature (Two-Step)](/guides/android/samples/digital-signature-two-step-kotlin.md)
- [Disabled Annotation Property](/guides/android/samples/disabled-annotation-property-java.md)
- [Document Comparison](/guides/android/samples/document-comparison-kotlin.md)
- [Document Download](/guides/android/samples/document-download-kotlin.md)
- [Document from Canvas](/guides/android/samples/document-from-canvas-kotlin.md)
- [Document Processing](/guides/android/samples/document-processing-kotlin.md)
- [Document Sharing](/guides/android/samples/document-sharing-java.md)
- [Document Switcher](/guides/android/samples/document-switcher-java.md)
- [DocumentView Composable](/guides/android/samples/documentview-composable-kotlin.md)
- [Download Progress](/guides/android/samples/download-progress-kotlin.md)
- [Dynamic Pages on Scroll](/guides/android/samples/dynamic-pages-on-scroll-kotlin.md)
- [E-Learning](/guides/android/samples/e-learning-kotlin.md)
- [Electronic + Digital Signing](/guides/android/samples/electronic-digital-signing-kotlin.md)
- [External Document](/guides/android/samples/external-document-kotlin.md)
- [File Annotation Creation](/guides/android/samples/file-annotation-creation-kotlin.md)
- [Filterable Thumbnail Grid](/guides/android/samples/filterable-thumbnail-grid-kotlin.md)
- [Form Click Intercept (Compose)](/guides/android/samples/form-click-intercept-compose-kotlin.md)
- [Form Creation](/guides/android/samples/form-creation-kotlin.md)
- [Form Filling](/guides/android/samples/form-filling-kotlin.md)
- [Forms with JavaScript](/guides/android/samples/forms-with-javascript-kotlin.md)
- [Fragment Runtime Configuration](/guides/android/samples/fragment-runtime-configuration-kotlin.md)
- [Generate PDF Report](/guides/android/samples/generate-pdf-report-kotlin.md)
- [HTML-to-PDF Conversion](/guides/android/samples/html-to-pdf-conversion-kotlin.md)
- [Image Document](/guides/android/samples/image-document-kotlin.md)
- [Inline Multimedia](/guides/android/samples/inline-multimedia-kotlin.md)
- [Inline Search](/guides/android/samples/inline-search-java.md)
- [Instant Document JSON](/guides/android/samples/instant-document-json-kotlin.md)
- [Instant JSON Attachment](/guides/android/samples/instant-json-attachment-kotlin.md)
- [JavaScript Actions](/guides/android/samples/javascript-actions-kotlin.md)
- [JavaScript Calculator](/guides/android/samples/javascript-calculator-kotlin.md)
- [JavaScript Form Filling](/guides/android/samples/javascript-form-filling-kotlin.md)
- [Kiosk Grid](/guides/android/samples/kiosk-grid-kotlin.md)
- [LTV Signature](/guides/android/samples/ltv-signature-kotlin.md)
- [Measurement Tools](/guides/android/samples/measurement-tools-kotlin.md)
- [Merge Documents](/guides/android/samples/merge-documents-kotlin.md)
- [Multimedia Annotations](/guides/android/samples/multimedia-annotations-kotlin.md)
- [Multiple Documents (Compose Pager)](/guides/android/samples/multiple-documents-compose-pager-kotlin.md)
- [OCR](/guides/android/samples/ocr-kotlin.md)
- [Overlay Views](/guides/android/samples/overlay-views-kotlin.md)
- [Overlay Visibility](/guides/android/samples/overlay-visibility-kotlin.md)
- [Password Protected PDF](/guides/android/samples/password-protected-pdf-kotlin.md)
- [PDF from Image](/guides/android/samples/pdf-from-image-kotlin.md)
- [PdfFragment](/guides/android/samples/pdffragment-kotlin.md)
- [PdfUiFragment](/guides/android/samples/pdfuifragment-kotlin.md)
- [Playground](/guides/android/samples/playground-kotlin.md)
- [Popup Toolbar Customization](/guides/android/samples/popup-toolbar-customization-kotlin.md)
- [Programmatic Zoom](/guides/android/samples/programmatic-zoom-kotlin.md)
- [Reader View](/guides/android/samples/reader-view-kotlin.md)
- [Remote URL](/guides/android/samples/remote-url-kotlin.md)
- [Runtime Configuration](/guides/android/samples/runtime-configuration-kotlin.md)
- [Scientific Paper](/guides/android/samples/scientific-paper-kotlin.md)
- [Screen Reader](/guides/android/samples/screen-reader-java.md)
- [Search Indexing](/guides/android/samples/search-indexing-kotlin.md)
- [Selection Customization](/guides/android/samples/selection-customization-java.md)
- [Signature Parcelize](/guides/android/samples/signature-parcelize-kotlin.md)
- [Signature Storage Database](/guides/android/samples/signature-storage-database-kotlin.md)
- [Sound Extraction](/guides/android/samples/sound-extraction-kotlin.md)
- [Split View](/guides/android/samples/split-view-java.md)
- [Tabbed Documents](/guides/android/samples/tabbed-documents-kotlin.md)
- [Tabbed Documents (Persistent)](/guides/android/samples/tabbed-documents-persistent-kotlin.md)
- [Text Field Suggestions](/guides/android/samples/text-field-suggestions-kotlin.md)
- [Thumbnail Bar Modes](/guides/android/samples/thumbnail-bar-modes-kotlin.md)
- [Try Instant](/guides/android/samples/try-instant-kotlin.md)
- [UI View Modes](/guides/android/samples/ui-view-modes-kotlin.md)
- [Vertical Scrollbar](/guides/android/samples/vertical-scrollbar-java.md)
- [Watermarks](/guides/android/samples/watermarks-kotlin.md)
- [XFDF Import/Export](/guides/android/samples/xfdf-import-export-kotlin.md)

