Область фона не соответствует ширине строки - PullRequest
0 голосов
/ 19 июня 2019

Необходимость заполнения ширины строки, чтобы сделать фон Rect эффективным

В обработчике Android onDraw я хотел разделить маркировку меток осей в соответствии с (Формат инженерного номера '% 1.2E' [Знак] f.ffE [знак] ee) Fraction (f.ff) и Exponent (ee) и перезаписать метку на ранее нарисованных пикселях для эффекта разделения строки: ||

1,23

E-01 ||

void markYaxisTicks(Canvas canvas, Paint paint){
    String refText = "-9.0000"; // somehow four String chars not making enough pixel width so adding 3 more zeroes
    for(int intervalIndex=0;intervalIndex<=numIntervals;intervalIndex++) {
        String ordinalText = String.format( Locale.getDefault(), "%+1.2E", spaceTime.maxOrdinal - intervalIndex * (spaceTime.maxOrdinal - spaceTime.minOrdinal)/numIntervals);
        String fract = ordinalText.substring(0,ordinalText.indexOf('E')-1);
        String expon = ordinalText.substring(ordinalText.indexOf('E'));
        double textXpos = 0.0f; // picturePosition[0];
        double textYpos = (picturePosition[1] + intervalIndex * pictureSize[1] / (double)numIntervals);
        canvas.drawLine( (float)Origin[3],
                (float)(picturePosition[1] + (intervalIndex * pictureSize[1] / (double)numIntervals)) ,
                (float)(Origin[3] + 8.0f),
                (float)(picturePosition[1] + (intervalIndex * pictureSize[1] / (double)numIntervals)) , paint );

        int textHeight = getTextHeight(refText);
        // when I use expon string for the Rect, the background owerwrite area is insufficient so I use longer refText instead
        Rect background2 = getTextBackgroundSize((float)textXpos, (float)textYpos+2.0f*textHeight, refText, paint);
        paint.setColor(Color.BLACK);
        canvas.drawRect(background2, paint);
        paint.setColor(rgbyPen[DAXES]);
        canvas.drawText(expon, (float)textXpos, (float)textYpos+2.0f*textHeight, paint);
        // likewise, when I use fract string for the Rect, the background owerwrite area is insufficient so I use longer refText instead
        Rect background1 = getTextBackgroundSize((float)textXpos, (float)textYpos-textHeight, refText, paint);
        paint.setColor(Color.BLACK);
        canvas.drawRect(background1, paint);
        paint.setColor(rgbyPen[DAXES]);
        canvas.drawText(fract, (float)textXpos, (float)textYpos-textHeight, paint);

        paint.setColor(Color.WHITE);
    }

Использование String of fract или длина expon не перезаписывает ожидаемую область Rect.

...