TextShaper Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona forma de texto para texto de estilo múltiple.
[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
- Herencia
- Atributos
Comentarios
Proporciona forma de texto para texto de estilo múltiple.
Este es un ejemplo de animación del tamaño del texto y el espaciado de letras para texto simple.
<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>
Documentación de Java para android.text.TextShaper
.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código y se usan según los términos descritos en la creative Commons 2.5.
Constructores
TextShaper(IntPtr, JniHandleOwnership) |
Proporciona forma de texto para texto de estilo múltiple. |
Propiedades
Class |
Devuelve la clase en tiempo de ejecución de este |
Handle |
Identificador de la instancia de Android subyacente. (Heredado de Object) |
JniIdentityHashCode |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
JniPeerMembers |
Proporciona forma de texto para texto de estilo múltiple. |
PeerReference |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
ThresholdClass |
Proporciona forma de texto para texto de estilo múltiple. |
ThresholdType |
Proporciona forma de texto para texto de estilo múltiple. |
Métodos
Clone() |
Crea y devuelve una copia de este objeto. (Heredado de Object) |
Dispose() |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
Dispose(Boolean) |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
Equals(Object) |
Indica si algún otro objeto es "igual a" este. (Heredado de Object) |
GetHashCode() |
Devuelve un valor de código hash del objeto. (Heredado de Object) |
JavaFinalize() |
Llamado por el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto. (Heredado de Object) |
Notify() |
Activa un único subproceso que está esperando en el monitor de este objeto. (Heredado de Object) |
NotifyAll() |
Activa todos los subprocesos que están esperando en el monitor de este objeto. (Heredado de Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
ShapeText(ICharSequence, Int32, Int32, ITextDirectionHeuristic, TextPaint, TextShaper+IGlyphsConsumer) |
Dar forma a texto de estilo múltiple. |
ShapeText(String, Int32, Int32, ITextDirectionHeuristic, TextPaint, TextShaper+IGlyphsConsumer) |
Dar forma a texto de estilo múltiple. |
ToArray<T>() |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
ToString() |
Devuelve una representación de cadena del objeto. (Heredado de Object) |
UnregisterFromRuntime() |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
Wait() |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser em notificado/em> o <em>interrumpido</em>.<>< (Heredado de Object) |
Wait(Int64) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <notificado<>/em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Wait(Int64, Int32) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <notificado<>/em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Implementaciones de interfaz explícitas
IJavaPeerable.Disposed() |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
IJavaPeerable.DisposeUnlessReferenced() |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
IJavaPeerable.Finalized() |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
IJavaPeerable.JniManagedPeerState |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Proporciona forma de texto para texto de estilo múltiple. (Heredado de Object) |
Métodos de extensión
JavaCast<TResult>(IJavaObject) |
Realiza una conversión de tipos comprobados en tiempo de ejecución de Android. |
JavaCast<TResult>(IJavaObject) |
Proporciona forma de texto para texto de estilo múltiple. |
GetJniTypeName(IJavaPeerable) |
Proporciona forma de texto para texto de estilo múltiple. |