Stosowanie lupy

Wypróbuj sposób tworzenia wiadomości
Jetpack Compose to zalecany zestaw narzędzi UI na Androida. Dowiedz się, jak używać tekstu w funkcji Compose

Widżet lupy dostępny na Androidzie 9 (poziom interfejsu API 28) i nowszych wirtualne lupę, które wyświetla powiększoną kopię obrazu View przez panelu nakładki, który jest reprezentowany przez obiektyw. Ta funkcja ulepsza wstawianie tekstu oraz wygodę użytkowników. Po zastosowaniu lupy do tekstu użytkownik może precyzyjnie ustawić kursor lub uchwyty wyboru, wyświetlając powiększony w panelu, który podąża za palcem użytkownika.

Rysunek 1 pokazuje, jak lupa ułatwia zaznaczanie tekstu. Interfejsy API powiększania nie są powiązane z tekstem, a widżetu można używać w różnych sytuacjach, takich jak np. czytanie małego tekstu lub powiększanie niewidocznych nazw miejsc na mapach.

Obraz pokazujący, jak wyświetla się lupa po chwyceniu prawego uchwytu wyboru
Rysunek 1. Powiększanie tekstu. Gdy użytkownik przeciągnie zaznaczony fragment wyświetli się lupa ułatwiająca dokładne umieszczenie zdjęcia.

Lupa jest już zintegrowana z widżetami platform, takimi jak TextView, EditText i WebView. Zapewnia spójne manipulowanie tekstem w różnych aplikacjach. Widżet ma prosty interfejs API i można go używać do powiększania dowolnych View w zależności od kontekstu aplikacji.

Wykorzystanie interfejsu API

Możesz automatycznie używać lupy w dowolnym widoku w ten sposób:

Kotlin

val view: View = findViewById(R.id.view)
val magnifier = Magnifier.Builder(view).build()
magnifier.show(view.width / 2.0f, view.height / 2.0f)

Java

View view = findViewById(R.id.view);
Magnifier magnifier = new Magnifier.Builder(view).build();
magnifier.show(view.getWidth() / 2, view.getHeight() / 2);

Zakładając, że hierarchia widoków ma pierwszy układ, lupa wyświetla się na ekranu i zawiera region wyśrodkowany na określonych współrzędnych w widoku. Okienko pojawi się nad punktem środkowym kopiowanej treści. lupa działa bezterminowo, dopóki użytkownik jej nie zamknie.

Fragment kodu poniżej pokazuje, jak zmienić tło powiększonego obrazu widok:

Kotlin

view.setBackgroundColor(...)

Java

view.setBackgroundColor(...);

Zakładając, że kolor tła jest widoczny w lupie, jest nieaktualny, ponieważ część widoku ze starym tłem jest nadal i wyświetlacze. Aby odświeżyć treści, użyj update() w ten sposób:

Kotlin

view.post { magnifier.update() }

Java

view.post(magnifier::update);

Po zakończeniu zamknij lupę, wywołując Metoda dismiss():

Kotlin

magnifier.dismiss()

Java

magnifier.dismiss();

Powiększanie interakcji użytkownika

Typowym zastosowaniem lupy jest umożliwienie użytkownikowi powiększenia obszaru widoku przez tak jak na ilustracji 2.

Rys. 2. Lupa reaguje na dotyk użytkownika. Jest zastosowano do elementu ViewGroup, który zawiera obiekt „ImageView” po lewej stronie i TextView po prawej stronie.

Możesz to zrobić, aktualizując lupę zgodnie ze zdarzeniami dotknięcia w następujący sposób:

Kotlin

imageView.setOnTouchListener { v, event ->
  when (event.actionMasked) {
    MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE -> {
      val viewPosition = IntArray(2)
      v.getLocationOnScreen(viewPosition)
      magnifier.show(event.rawX - viewPosition[0], event.rawY - viewPosition[1])
    }
    MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_UP -> {
      magnifier.dismiss()
    }
  }
  true
}

Java

imageView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                // Fall through.
            case MotionEvent.ACTION_MOVE: {
                final int[] viewPosition = new int[2];
                v.getLocationOnScreen(viewPosition);
                magnifier.show(event.getRawX() - viewPosition[0],
                               event.getRawY() - viewPosition[1]);
                break;
            }
            case MotionEvent.ACTION_CANCEL:
                // Fall through.
            case MotionEvent.ACTION_UP: {
                magnifier.dismiss();
            }
        }
        return true;
    }
});

Dodatkowe uwagi na temat powiększania tekstu

W przypadku widżetów tekstowych platformy ważne jest, aby zrozumieć specyfikę lupy zachowaniach i konsekwentnym włączaniu lupy w niestandardowym widoku tekstowym na całej platformie Androida. Weź pod uwagę następujące kwestie:

  • Lupa uruchamia się natychmiast, gdy użytkownik kliknie wstawienie lub uchwyt wyboru.
  • Lupa zawsze płynnie podąża za palcem użytkownika poziomo, w pionie, na środku bieżącej linii tekstowej.
  • Przy poruszaniu w poziomie lupa porusza się tylko między do prawej granicy bieżącej linii. Poza tym, gdy użytkownik dotknie tego ekranu, tych granic i odległości poziomej między punktem styczności z klientem jest większa niż połowa pierwotnej szerokości lupy, lupa zostanie zamknięta, a kursor przestaje być widoczny lupa.
  • Lupa nigdy nie uruchamia się, gdy czcionka tekstu jest zbyt duża. Tekst to uznaje się za zbyt dużą, gdy różnica między zjawiskiem kroju czcionki a źródłem jest większy niż wysokość treści, która mieści się w lupie. Aktywowanie lupy w tym przypadku nie dodaje wartości.