Android Libgdx LiveWallpaper не останавливается - PullRequest
0 голосов
/ 23 сентября 2018

Я создаю живые обои для Android с помощью Libgdx. Это просто круг на экране, который получает случайный цвет и положение, и он медленно перемещается вверх.

Проблема заключается в настройке живых обоев, когда я снова нажимаю на значок приложения, вместо нового круга с новым цветом и положением отображается тот, который уже запущен.

Единственный способ создать новый круг - это остановить живые обои с помощью другого, а затем снова запустить приложение.

Я пытаюсь получить каждый раз, когданажмите на значок, чтобы загрузить новые живые обои, не влияя на уже запущенные, и если я нажму кнопку «установить в качестве живых обоев», старая будет заменена новой.

Класс Android Launcher

public class AndroidLauncher extends AndroidApplication {
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        initialize(new CoreLWP(), config);
    }
}

Класс живых обоев

public class LiveWallpaper  extends AndroidLiveWallpaperService {

public CoreLWP wallpaper;

@Override
public void onCreateApplication () {
    super.onCreateApplication();

    final AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();

    this.wallpaper = new CoreLWP();
    initialize(this.wallpaper, config);

 }
}

Базовый класс живых обоев

public class CoreLWP extends ApplicationAdapter implements ApplicationListener, AndroidWallpaperListener {


private ShapeRenderer ball;
private float x,y;
private Random random;

private float r,g,b;

@Override
public void create () {
    ball = new ShapeRenderer();
    random = new Random();

    //generating random position
    x = random.nextInt(Gdx.graphics.getWidth());
    y = random.nextInt(Gdx.graphics.getHeight());

     //generating random rgb values
     r = getFloatRandomNum(0, 1) ;
     g = getFloatRandomNum(0, 1) ;
     b = getFloatRandomNum(0, 1) ;
}

@Override
public void render () {

    //setting the background
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    //updating x and y position
    x = x + 0.5f;
    y = y + 0.6f;

    ball.begin(ShapeRenderer.ShapeType.Filled);
    ball.setColor(r,g,b,1);
    ball.circle(x,y,100);
    ball.end();

}

//returns a random float number between a range
private float getFloatRandomNum(float min, float max) {
    float random = min + new Random().nextFloat() * (max - min);
    return random;
}

@Override
public void dispose () {
    ball.dispose();
}

@Override
public void offsetChange(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) {}

@Override
public void previewStateChange(boolean isPreview) {}

@Override
public void iconDropped(int x, int y) {}
}
...