Android Paint API - PathEffect (efecto de ruta)

Introducción a esta sección:

Esta sección continúa aprendiendo la API de Paint——PathEffect (efecto de ruta). Configuramos el estilo del pincel en Stroke, y podemos dibujar gráficos compuestos de líneas. Estas líneas ocasionalmente parecen monótonas, ¿verdad? Por ejemplo, si desea para usar estos Cámbielo primero a una línea de puntos, o si desea suavizar la esquina del camino, etc., ¡entonces puede considerar usar este PathEffect para lograrlo!

Documentación oficial de la API: PathEffect  Ingrese y mire la documentación, puede encontrar que este PathEffect es el mismo que el MaskFilter (máscara) y ColorFilter (filtro de color) que aprendimos anteriormente, y casi no hay métodos disponibles:

Generalmente usamos sus seis subclases:

¡Analicemos sus funciones y métodos de construcción a su vez!


1. Función de subclase y análisis de parámetros del método de construcción:


1) Efecto de ruta de esquina

CornerPathEffect(radio flotante)

Conecte los ángulos entre los segmentos de línea de conexión de la ruta de una manera más suave, similar al efecto de arcos y tangentes. ¡radio es el radio del arco especificado!


2) Efecto de la ruta del tablero

DashPathEffect (intervalos flotantes [], fase flotante)

Haga que el segmento de línea de Path sea discontinuo, los intervalos son una matriz de ON y OFF de la línea discontinua, el número de elementos en la matriz debe ser> = 2; ¡y la fase es el desplazamiento al dibujar!


3) Efecto de ruta discreta

DiscretePathEffect(longitud del segmento flotante, desviación flotante)

Dispersa los segmentos de línea del Camino, de modo que el efecto de desintegración ocurra sobre la base del camino original. segmentLength especifica la longitud máxima del segmento y la desviación es la desviación al dibujar.


4)PathDashPathEffect

PathDashPathEffect (forma de ruta, avance flotante, fase flotante, estilo PathDashPathEffect.Style)

La función es usar gráficos de ruta para completar la ruta actual, la forma se refiere a los gráficos de relleno, el avance es el intervalo entre cada gráfico, el estilo es el valor de enumeración libre de este tipo, hay tres situaciones: ROTATE , MORPH y TRANSLATE .

  • En el caso de ROTATE: la transformación gráfica en la conexión del segmento de línea se conecta rotando a un ángulo consistente con la dirección de movimiento del siguiente segmento
  • En el caso de MORPH: los gráficos se conectarán al siguiente segmento con deformación como estiramiento o compresión
  • En el caso de TRANSLATE: los gráficos se conectarán al siguiente segmento por traducción de posición

5) Efecto de ruta de composición

ComposePathEffect(PathEffect exterior, PathEffect interior)

La función es: ¡ el efecto de combinación primero realizará el interior y luego aumentará el efecto exterior sobre la base del interior!


6) efecto de ruta de suma

SumPathEffect(PathEffect primero, PathEffect segundo)

La función es: el efecto superpuesto, que es diferente de ComposePathEffect, mostrará los efectos de los dos parámetros de forma independiente durante la ejecución, y luego simplemente se superpondrán y mostrarán los dos efectos juntos.


2. Escribir código para verificar sus respectivos efectos

Es inútil decir más, escribir código es lo más práctico, ¡escribamos el código para probar los efectos de estas subclases!

Diagrama de efecto de carrera :

Código de implementación :

Escribamos una Vista por nosotros mismos. El efecto del movimiento de la línea en él es causado por el aumento de fase, cada vez + 2, y luego invalida los redibujados, ¡así que no se sorprenda! PathEffectView.java :

/** 
 * Creado por Jay el 30/10/2015 0030. 
 */ 
public class PathEffectView extends View { 

    private Paint mPaint; 
    ruta privada mPath; 
    fase flotante privada = 0; 
    efectos PathEffect[] privados = new PathEffect[7]; 
    colores privados int[]; 

    PathEffectView público (contexto contexto) { 
        this (contexto, nulo); 
    } 

    public PathEffectView(Context context, AttributeSet attrs) { 
        super(context, attrs); 
        en eso(); 
    } 

    public PathEffectView(Context context, AttributeSet attrs, int defStyleAttr) { 
        super(context, attrs, defStyleAttr); 
    } 

    //初始化画笔
    private void init() { 
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); //anti-aliasing 
        mPaint.setStyle(Paint.Style.STROKE); //estilo de pintura: Hollow 
        mPaint.setStrokeWidth(5); //grosor del trazo 
        mPath = new Path(); 
        mPath.moveTo(0, 0); 
        for (int i = 1; i <= 15; i++) { 
            // Genere 15 puntos, genere aleatoriamente sus coordenadas y conéctelos en un Path 
            mPath .lineTo (i * 40, (float) Math.random() * 100); 
        } 
        // Inicializar 7 colores 
        colors = new int[] { Color.RED, Color.BLUE, Color.GREEN, 
                Color.YELLOW, Color .BLACK, Color.MAGENTA, Color.CYAN }; 
    } 


    @Override 
    protected void onDraw(Canvas canvas) {
        lienzo.drawColor(Color.BLANCO); 
        //初始化其中路径效果:
        efectos[0] = nulo; //无效果
        efectos[1] = new CornerPathEffect(10); // 
        Efectos de CornerPathEffect[2] = new DiscretePathEffect(3.0f, 5.0f); //Efectos DiscretePathEffect 
        [3] = new DashPathEffect(new float[] { 20, 10, 5, 10 },fase); //DashPathEffect 
        Path p = new Path(); 
        p.addRect(0, 0, 8, 8, Ruta.Dirección.CCW); 
        efectos[4] = nuevo PathDashPathEffect(p, 12, fase, 
                PathDashPathEffect.Style.ROTATE); //PathDashPathEffect 
        efectos[5] = new ComposePathEffect(efectos[2], efectos[4]); //ComposePathEffect
        Effects[6] = new SumPathEffect(effects[2], effects[4]); //SumPathEffect 
        // Mueve el lienzo a (10,10) y comienza a dibujar
        canvas.translate(10, 10); 
        // Use 7 efectos de ruta diferentes y 7 colores diferentes para dibujar la ruta 
        para (int i = 0; i <effects.length; i++) { 
            mPaint.setPathEffect(effects[ i]); 
            mPaint.setColor(colors[i]); 
            canvas.drawPath(mPath, mPaint); 
            canvas.translate(0, 60); 
        } 
        // Cambia el valor de fase para formar un efecto de animación 
        fase += 2; 
        invalidate() ; 
    } 
}

Supongo que te gusta

Origin blog.csdn.net/leyang0910/article/details/131775416
Recomendado
Clasificación