Libgdx.Заполните ProgressBar закругленными углами с помощью Pixmap - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь сделать загрузку ProgressBar с Pixmap.

public static ProgressBar createUpProgressBar() {
        Pixmap pixmap = new Pixmap(PROGRESS_BAR_WIDTH, PROGRESS_BAR_HEIGHT, Format.RGBA8888);
        pixmap.setColor(Color.RED);
        setUpEdges(pixmap);
        Texture texture = new Texture(pixmap);
        texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
        TextureRegionDrawable drawable = new TextureRegionDrawable(new TextureRegion(texture));
        pixmap.dispose();
    ProgressBarStyle progressBarStyle = new ProgressBarStyle();
    progressBarStyle.background = drawable;

    pixmap = new Pixmap(PROGRESS_BAR_EDGES_RADIUS * 2 + 20, PROGRESS_BAR_HEIGHT, Format.RGBA8888);
    pixmap.setColor(Color.GREEN);
    setUpEdges(pixmap);
    texture = new Texture(pixmap);
    texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
    drawable = new TextureRegionDrawable(new TextureRegion(texture));

    pixmap.dispose();

    progressBarStyle.knob = drawable;
    progressBarStyle.knobBefore = drawable;

    ProgressBar progressBar = new ProgressBar(0.0f, 1.0f, 0.01f, false, progressBarStyle);
    progressBar.setValue(0.0f);
    progressBar.setAnimateDuration(0.25f);

    int x = GAME_WIDTH / 2 - PROGRESS_BAR_WIDTH / 2;
    progressBar.setBounds(x, PROGRESS_BAR_Y, PROGRESS_BAR_WIDTH, PROGRESS_BAR_HEIGHT);

    return progressBar;
}

private static void setUpEdges(Pixmap pixmap) {
    //link to solution: https://developerover30.wordpress.com/2014/11/11/libgdx-creating-a-rounded-rectangle-pixmap/
    // Pink rectangle
    pixmap.fillRectangle(0, PROGRESS_BAR_EDGES_RADIUS, pixmap.getWidth(),
                         pixmap.getHeight() - 2 * PROGRESS_BAR_EDGES_RADIUS);

    // Green rectangle
    pixmap.fillRectangle(PROGRESS_BAR_EDGES_RADIUS, 0, pixmap.getWidth() - 2 * PROGRESS_BAR_EDGES_RADIUS,
                         pixmap.getHeight());

    // Bottom-left circle
    pixmap.fillCircle(PROGRESS_BAR_EDGES_RADIUS, PROGRESS_BAR_EDGES_RADIUS, PROGRESS_BAR_EDGES_RADIUS);

    // Top-left circle
    pixmap.fillCircle(PROGRESS_BAR_EDGES_RADIUS, pixmap.getHeight() - PROGRESS_BAR_EDGES_RADIUS,
                      PROGRESS_BAR_EDGES_RADIUS);

    // Bottom-right circle
    pixmap.fillCircle(pixmap.getWidth() - PROGRESS_BAR_EDGES_RADIUS, PROGRESS_BAR_EDGES_RADIUS,
                      PROGRESS_BAR_EDGES_RADIUS);

    // Top-right circle
    pixmap.fillCircle(pixmap.getWidth() - PROGRESS_BAR_EDGES_RADIUS, pixmap.getHeight() - PROGRESS_BAR_EDGES_RADIUS,
                      PROGRESS_BAR_EDGES_RADIUS);
}
}

Когда я смотрю на индикатор выполнения с 15% загрузкой, он выглядит хорошо

enter image description here

Но когда я смотрю на индикатор выполнения при почти полной загрузке, он выглядит неправильно

enter image description here

У нас правильно последнее деление вчасть B .Кажется, что часть A растягивается на одно деление на всю ширину.Я ожидаю, что каждое подразделение должно опираться друг на друга, чтобы достичь полного заполнения ProgressBar.

Может ли кто-нибудь объяснить мне, где я ошибаюсь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...