Exemple #1
0
  @SuppressLint("DrawAllocation")
  @Override
  protected void onDraw(Canvas canvas) {
    if (isCompleted) {
      canvas.drawBitmap(mapBitmap, imgMatrix, paint);
      canvas.setDrawFilter(pfdf);
      if (isInvalidate) {
        if (isRotate) {}
        if (isScale) {
          float curScale = MapCommonUtil.getMapScale(this);
          if (scaleStep > 0) {
            if (curScale * (1 + scaleStep) > scale) {
              isScale = false;
              isInvalidate = false;
              imgMatrix.postScale(scale / curScale, scale / curScale, scaleDx, scaleDy);
              if (onInvalidataListener != null) {
                onInvalidataListener.onInvalidataEnd(-1);
              }
            }
          } else {
            if (curScale * (1 + scaleStep) < scale) {
              isScale = false;
              isInvalidate = false;
              imgMatrix.postScale(scale / curScale, scale / curScale, scaleDx, scaleDy);
              if (onInvalidataListener != null) {
                onInvalidataListener.onInvalidataEnd(-1);
              }
            }
          }
          if (isScale) {
            imgMatrix.postScale(1 + scaleStep, 1 + scaleStep, scaleDx, scaleDy);
          }
        }

        if (isTranslate) {
          sumX += translateStepX;
          sumY += translateStepY;
          if (Math.abs(sumX) > Math.abs(translateX) && Math.abs(sumY) > Math.abs(translateY)) {
            isTranslate = false;
            isInvalidate = false;
            if (onInvalidataListener != null) {
              onInvalidataListener.onInvalidataEnd(translateFrom);
            }
          }
          if (isTranslate) {
            imgMatrix.postTranslate(translateStepX, translateStepY);
          }
        }
        if (onInvalidataListener != null) {
          onInvalidataListener.onInvalidata();
        }
        invalidate();
      }
      if (isNaviRefresh && !isInvalidate) {
        PathEffect pe1 = new CornerPathEffect(10);
        PathEffect pe2 =
            new PathDashPathEffect(
                makePathDash(), 60 * scale, phase, PathDashPathEffect.Style.ROTATE);
        PathEffect pe = new ComposePathEffect(pe2, pe1);
        paint1.setPathEffect(pe);
        paint1.setStrokeWidth(10f * scale);
        paint2.setPathEffect(pe1);
        paint2.setStrokeWidth(15f * scale);
        if (routeAlpha <= 255 && isNaviMode) {
          paint1.setAlpha(routeAlpha);
          paint2.setAlpha(routeAlpha);
          routeAlpha += 5;
        } else if (!isNaviMode) {
          if (routeAlpha > 0) {
            paint1.setAlpha(routeAlpha);
            paint2.setAlpha(routeAlpha);
            routeAlpha -= 5;
          } else {
            isNaviRefresh = false;
          }
        }
        canvas.drawPath(p1, paint2);
        canvas.drawPath(p1, paint1);
        canvas.save();
        phase = phase - 0.5f * scale;
        invalidate();
      }
    }

    super.onDraw(canvas);
  }