TextShaper Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Fornisce la forma del testo per il testo con più stili.
[Android.Runtime.Register("android/text/TextShaper", ApiSince=31, DoNotGenerateAcw=true)]
public class TextShaper : Java.Lang.Object
[<Android.Runtime.Register("android/text/TextShaper", ApiSince=31, DoNotGenerateAcw=true)>]
type TextShaper = class
inherit Object
- Ereditarietà
- Attributi
Commenti
Fornisce la forma del testo per il testo con più stili.
Di seguito è riportato un esempio di animazione delle dimensioni del testo e della spaziatura delle lettere per il testo semplice.
<code>
// In this example, shape the text once for start and end state, then animate between two shape
// result without re-shaping in each frame.
class SimpleAnimationView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
private val textDir = TextDirectionHeuristics.LOCALE
private val text = "Hello, World." // The text to be displayed
// Class for keeping drawing parameters.
data class DrawStyle(val textSize: Float, val alpha: Int)
// The start and end text shaping result. This class will animate between these two.
private val start = mutableListOf<Pair<PositionedGlyphs, DrawStyle>>()
private val end = mutableListOf<Pair<PositionedGlyphs, DrawStyle>>()
init {
val startPaint = TextPaint().apply {
alpha = 0 // Alpha only affect text drawing but not text shaping
textSize = 36f // TextSize affect both text shaping and drawing.
letterSpacing = 0f // Letter spacing only affect text shaping but not drawing.
}
val endPaint = TextPaint().apply {
alpha = 255
textSize =128f
letterSpacing = 0.1f
}
TextShaper.shapeText(text, 0, text.length, textDir, startPaint) { _, _, glyphs, paint ->
start.add(Pair(glyphs, DrawStyle(paint.textSize, paint.alpha)))
}
TextShaper.shapeText(text, 0, text.length, textDir, endPaint) { _, _, glyphs, paint ->
end.add(Pair(glyphs, DrawStyle(paint.textSize, paint.alpha)))
}
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
// Set the baseline to the vertical center of the view.
canvas.translate(0f, height / 2f)
// Assume the number of PositionedGlyphs are the same. If different, you may want to
// animate in a different way, e.g. cross fading.
start.zip(end) { (startGlyphs, startDrawStyle), (endGlyphs, endDrawStyle) ->
// Tween the style and set to paint.
paint.textSize = lerp(startDrawStyle.textSize, endDrawStyle.textSize, progress)
paint.alpha = lerp(startDrawStyle.alpha, endDrawStyle.alpha, progress)
// Assume the number of glyphs are the same. If different, you may want to animate in
// a different way, e.g. cross fading.
require(startGlyphs.glyphCount() == endGlyphs.glyphCount())
if (startGlyphs.glyphCount() == 0) return@zip
var curFont = startGlyphs.getFont(0)
var drawStart = 0
for (i in 1 until startGlyphs.glyphCount()) {
// Assume the pair of Glyph ID and font is the same. If different, you may want
// to animate in a different way, e.g. cross fading.
require(startGlyphs.getGlyphId(i) == endGlyphs.getGlyphId(i))
require(startGlyphs.getFont(i) === endGlyphs.getFont(i))
val font = startGlyphs.getFont(i)
if (curFont != font) {
drawGlyphs(canvas, startGlyphs, endGlyphs, drawStart, i, curFont, paint)
curFont = font
drawStart = i
}
}
if (drawStart != startGlyphs.glyphCount() - 1) {
drawGlyphs(canvas, startGlyphs, endGlyphs, drawStart, startGlyphs.glyphCount(),
curFont, paint)
}
}
}
// Draws Glyphs for the same font run.
private fun drawGlyphs(canvas: Canvas, startGlyph: PositionedGlyphs,
endGlyph: PositionedGlyphs, start: Int, end: Int, font: Font,
paint: Paint) {
var cacheIndex = 0
for (i in start until end) {
intArrayCache[cacheIndex] = startGlyph.getGlyphId(i)
// The glyph positions are different from start to end since they are shaped
// with different letter spacing. Use linear interpolation for positions
// during animation.
floatArrayCache[cacheIndex * 2] =
lerp(startGlyph.getGlyphX(i), endGlyph.getGlyphX(i), progress)
floatArrayCache[cacheIndex * 2 + 1] =
lerp(startGlyph.getGlyphY(i), endGlyph.getGlyphY(i), progress)
if (cacheIndex == CACHE_SIZE) { // Cached int array is full. Flashing.
canvas.drawGlyphs(
intArrayCache, 0, // glyphID array and its starting offset
floatArrayCache, 0, // position array and its starting offset
cacheIndex, // glyph count
font,
paint
)
cacheIndex = 0
}
cacheIndex++
}
if (cacheIndex != 0) {
canvas.drawGlyphs(
intArrayCache, 0, // glyphID array and its starting offset
floatArrayCache, 0, // position array and its starting offset
cacheIndex, // glyph count
font,
paint
)
}
}
// Linear Interpolator
private fun lerp(start: Float, end: Float, t: Float) = start * (1f - t) + end * t
private fun lerp(start: Int, end: Int, t: Float) = (start * (1f - t) + end * t).toInt()
// The animation progress.
var progress: Float = 0f
set(value) {
field = value
invalidate()
}
// working copy of paint.
private val paint = Paint()
// Array cache for reducing allocation during drawing.
private var intArrayCache = IntArray(CACHE_SIZE)
private var floatArrayCache = FloatArray(CACHE_SIZE * 2)
}
</code>
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.
Costruttori
| Nome | Descrizione |
|---|---|
| TextShaper(IntPtr, JniHandleOwnership) |
Fornisce la forma del testo per il testo con più stili. |
Proprietà
| Nome | Descrizione |
|---|---|
| Class |
Restituisce la classe di runtime di questo |
| Handle |
Handle per l'istanza di Android sottostante. (Ereditato da Object) |
| JniIdentityHashCode |
Ottiene il codice hash di identità assegnato a questo Java peer dal runtime di interoperabilità. (Ereditato da Object) |
| JniManagedPeerState |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
| JniPeerMembers |
Fornisce la forma del testo per il testo con più stili. |
| PeerReference |
Ottiene il riferimento all'oggetto JNI per questo peer Java. (Ereditato da Object) |
| ThresholdClass |
Fornisce la forma del testo per il testo con più stili. |
| ThresholdType |
Fornisce la forma del testo per il testo con più stili. |
Metodi
| Nome | Descrizione |
|---|---|
| Clone() |
Crea e restituisce una copia di questo oggetto. (Ereditato da Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
| Dispose() |
Rilascia le risorse contenute in questo peer Java. (Ereditato da Object) |
| Dispose(Boolean) |
Rilascia le risorse contenute in questo peer Java. (Ereditato da Object) |
| DisposeUnlessReferenced() |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
| Equals(Object) |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
| Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
| GetHashCode() |
Restituisce un valore di codice hash per l'oggetto . (Ereditato da Object) |
| JavaFinalize() |
Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto . (Ereditato da Object) |
| Notify() |
Riattiva un singolo thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
| NotifyAll() |
Riattiva tutti i thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
| ShapeText(ICharSequence, Int32, Int32, ITextDirectionHeuristic, TextPaint, TextShaper+IGlyphsConsumer) |
Testo con più stili. |
| ShapeText(String, Int32, Int32, ITextDirectionHeuristic, TextPaint, TextShaper+IGlyphsConsumer) |
Testo con più stili. |
| ToArray<T>() |
Crea una matrice gestita da questo wrapper di matrice Java. (Ereditato da Object) |
| ToString() |
Restituisce una rappresentazione di stringa dell'oggetto . (Ereditato da Object) |
| UnregisterFromRuntime() |
Annulla la registrazione di questo Java peer dal runtime di interoperabilità. (Ereditato da Object) |
| Wait() |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>. (Ereditato da Object) |
| Wait(Int64, Int32) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
| Wait(Int64) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
Implementazioni dell'interfaccia esplicita
| Nome | Descrizione |
|---|---|
| IJavaPeerable.Disposed() |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
| IJavaPeerable.Finalized() |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Fornisce la forma del testo per il testo con più stili. (Ereditato da JavaObject) |
Metodi di estensione
| Nome | Descrizione |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Ottiene il nome JNI del tipo dell'istanza |
| JavaAs<TResult>(IJavaPeerable) |
Provare a digitare |
| JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
| JavaCast<TResult>(IJavaObject) |
Fornisce la forma del testo per il testo con più stili. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Provare a digitare |