Androide de la serie de encargo: línea de mano y un sentido de aura salpicadero Tecnología!

Este artículo es el uso de algunos de los conceptos básicos de la vista personalizada, si usted no está interesado en seguir paso a paso a paso
si desea que esta parte del conocimiento que se examina y peinado, también puede seguir los pasos de vista, el documento de texto está sujeto a la supervisión, pero también se ven generosa comentarios.

representaciones

análisis

Vista personalizada Lo principal es una especie de dibujar una lógica clara. Entender la lógica, paso a paso, complejo Vista no será menos complicado.

etapas de estiramiento se resumen como sigue:

  1. Dibuje una emisora ​​de luz curvado
  2. Dibujo escala y digitales
  3. Dibujar la sombra del puntero
  4. Antecedentes de dibujo intermedio círculos negros
  5. manos del gráfico
  6. Profundo círculo de luz azul dibujado
  7. Dibujar texto de marcado
  8. Añadir inferior del mando

realización

Ver necesidad de utilizar efecto luminoso, utilizamos el shader de lograr, entonces tenemos que la primera vez, la aceleración de hardware.

  // 关闭硬件加速
  setLayerType(LAYER_TYPE_SOFTWARE, null);

1. Dibuje un arco luminiscente

  canvas.translate(getPaddingLeft() + radiusDial, getPaddingTop() + radiusDia
  arcPaint.setShader(null);
  arcPaint.setStyle(Paint.Style.STROKE);
  arcPaint.setAntiAlias(true);
  arcPaint.setAlpha(70);
  arcPaint.setStyle(Paint.Style.STROKE);
  arcPaint.setStrokeWidth(strokeWidthDial);
  arcPaint.setShadowLayer(10, 0, 0, Color.parseColor("#FFFFFF"));
  arcPaint.setColor(Color.parseColor("#38F9FD"));
  canvas.drawArc(mRect, 150, (360 - openAngle), false, arcPaint);

2. Dibuje escala y digitales

  canvas.rotate(150);
  for (int i = 0; i < clockPointNum + 1; i++) {
      pointerPaint.setColor(colorDialMiddle);
      if (i % 10 == 0) {     //长表针
          pointerPaint.setStrokeWidth(3);
          canvas.drawLine(radiusDial - DEFAULT_border - strokeWidthDial, 0, radiusDial - strokeWidthDial - dp2px(15), 0, pointerPaint);
          drawPointerText(canvas, i);
      } else if (i % 5 == 0f) {    //短表针
          pointerPaint.setStrokeWidth(2);
          canvas.drawLine(radiusDial - DEFAULT_border - strokeWidthDial, 0, radiusDial - strokeWidthDial - dp2px(9), 0, pointerPaint);
      }
      canvas.rotate((360 - openAngle) / clockPointNum);
  }
  canvas.rotate(-((180 - openAngle) / 2 + ((360 - openAngle) / clockPointNum)));
  /**
   * 绘制刻度数字
   */
    private void drawPointerText(Canvas canvas, int i) {
        canvas.save();
        pointerPaint.setColor(getResources().getColor(R.color.white));
        int currentCenterX = (int) (radiusDial - strokeWidthDial - dp2px(21) - pointerPaint.measureText(String.valueOf(i)) / 2);
        canvas.translate(currentCenterX, 0);
        canvas.rotate(360 - 150 - ((360 - openAngle) / clockPointNum) * i);        //坐标系总旋转角度为360度
        int textBaseLine = (int) (0 + (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.bottom);
        canvas.drawText(String.valueOf(i + clockMinValue), 0, textBaseLine, pointerPaint);
    }

3. Dibujar la sombra del puntero

  int currentDegree = (int) ((currentValue - clockMinValue) * ((360 - openAngle) / clockPointNum) + 150);
  canvas.rotate(currentDegree);
  int[] colorSweep = {0xAAFFE9EC, 0x0028E9EC, 0xAA28E9EC};
  float[] position = {0f, 0.9f, 1f};
  SweepGradient mShader = new SweepGradient(0, 0, colorSweep, position);
  arcPaint.setShader(mShader);
  arcPaint.setStyle(Paint.Style.STROKE);
  arcPaint.setStrokeWidth((float) (radiusDial * 0.4));
  arcPaint.clearShadowLayer();
  RectF mRect = new RectF((float) (-mRealRadius - DEFAULT_border + radiusDial * 0.2), (float) (-mRealRadius - 
  DEFAULT_border + radiusDial * 0.2),
          (float) (mRealRadius + DEFAULT_border - radiusDial * 0.2), (float) (mRealRadius + DEFAULT_border - radiusDial * 0.2));
  canvas.drawArc(mRect, 360 - (currentDegree - 150), (currentDegree - 150), false, arcPaint);

4. Dibuje intermedio círculo fondo negro

  canvas.restore();
  canvas.translate(getPaddingLeft() + radiusDial, getPaddingTop() + radiusDial);
  Paint pointerPaint = new Paint();
  pointerPaint.setAntiAlias(true);
  pointerPaint.setStyle(Paint.Style.FILL);
  pointerPaint.setColor(Color.parseColor("#05002D"));
  canvas.drawCircle(0, 0, (float) (radiusDial * 0.6), pointerPaint);

5. Dibuje las manos

  canvas.save();
  int currentDegree = (int) ((currentValue - clockMinValue) * ((360 - openAngle) / clockPointNum) + 150);
  canvas.rotate(currentDegree);
  titlePaint.setColor(Color.WHITE);
  titlePaint.setAntiAlias(true);
  pointerPath.moveTo(radiusDial - dp2px(12), 0);
  pointerPath.lineTo(0, -dp2px(5));
  pointerPath.lineTo(-12, 0);
  pointerPath.lineTo(0, dp2px(5));
  pointerPath.close();
  canvas.drawPath(pointerPath, titlePaint);
  canvas.save();
  canvas.restore();

6. Dibuje profunda círculo azul claro

  canvas.rotate(0);
  canvas.restore();
  Paint pointerPaint = new Paint();
  pointerPaint.setAntiAlias(true);
  pointerPaint.setStyle(Paint.Style.FILL);
  pointerPaint.setColor(Color.parseColor("#050D3D"));
  pointerPaint.setShadowLayer(15, 0, 0, Color.parseColor("#006EC6"));
  canvas.drawCircle(0, 0, (float) (radiusDial * 0.4), pointerPaint);

7. Dibujar texto de marcado

  titlePaint.setColor(Color.WHITE);
  titlePaint.setColor(titleDialColor);
  titlePaint.setTextSize(titleDialSize);
  canvas.drawText(formatData(currentValue), 0, 0, titlePaint);
  titlePaint.setColor(Color.parseColor("#38F9FD"));
  titlePaint.setTextSize(sp2px(14));
  canvas.drawText("(" + dataUnit + ")", 0, dp2px(18), titlePaint);

8. Añadir la parte inferior del control

Esta parte del código es más flexible, elaborado después de que el panel de control principal, puede agregar otros controles en la parte inferior del archivo de diseño. Y establecer los eventos de clic. En este se salte la tabla

# Por último,
le adjunto mi tecnología de la base Android aprendizaje programa, el acceso a contenido relevante para jugar con mi GitHub: https://github.com/Meng997998/AndroidJX

Se toma su tiempo para invertir en el aprendizaje, significa que usted puede ganar habilidades, tener la oportunidad de aumentar los ingresos.

Aquí para compartir mi Android PDF Daquan aprender a aprender, aprender este androide PDF Daquan realmente contiene todos los aspectos, y contiene conocimientos básicos de Java, la base de Android, Android extensión avanzada, y así sucesivamente algoritmo de recolección

Acceso: preocupación veo introducción personal o directa clic me libre de recibir

Mi colección de este estudio, puede ayudar eficazmente a captar los puntos de conocimiento.

En resumen también estamos aquí para ayudar a mejorar el aprendizaje avanzado, pero también le ahorra el tiempo para aprender los datos de búsqueda en línea también se pueden compartir con amigos cercanos estudiar juntos

Publicados 168 artículos originales · ganado elogios 71 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/Aerfa789/article/details/105126969
Recomendado
Clasificación