Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android-图像视图滚动导致崩溃?_Java_Android_Android Imageview - Fatal编程技术网

Java android-图像视图滚动导致崩溃?

Java android-图像视图滚动导致崩溃?,java,android,android-imageview,Java,Android,Android Imageview,我有一个功能,可以滚动我的图像视图,使其每0.1秒下降5个像素,但一旦我运行此功能,我就会发现抱歉,应用程序已停止响应 您可以在下面查看我的代码: void startGameLoop(){ boolean alive=true; while(alive){ int x = theSprite.getScrollX(); int y = theSprite.getScrollY(); y-=5; theSp

我有一个功能,可以滚动我的图像视图,使其每0.1秒下降5个像素,但一旦我运行此功能,我就会发现
抱歉,应用程序已停止响应

您可以在下面查看我的代码:

    void startGameLoop(){
    boolean alive=true;
    while(alive){

        int x = theSprite.getScrollX();
        int y = theSprite.getScrollY();
        y-=5;
        theSprite.scrollTo(x, y);
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

如果您将此代码放入Thread.sleep(100)。 使用带有延迟的处理程序。处理程序可以更改诸如
ImageView
之类的内容,因为它在主Ui线程上运行。 像这样的

private final Runnable timerRunnable = new Runnable() {
    @Override
    public void run() {
        int x = theSprite.getScrollX();
        int y = theSprite.getScrollY();
        y-=5;
        theSprite.scrollTo(x, y);
        if (!closing)
            startTimer();
    }
};

handler = new Handler();
startTimer();

/**
 * Start periodically callbacks.
 */
private void startTimer() {
    runOnUiThreadDelay(timerRunnable, 400L);
}

public void runOnUiThreadDelay(final Runnable runnable, long delayMillis) {
    handler.postDelayed(runnable, delayMillis);
}

请添加logcat!到目前为止,我觉得这是一个永恒的循环。我的意思是什么时候将是
alive==false
肯定有一种方法可以通过睡眠来做到这一点?你这样做的方法似乎非常复杂,加上我似乎无法让它工作,我得到了一堆错误。不,如果你睡在主线程上,你的应用程序将睡眠。延迟处理程序未在主ui线程上休眠。它是一个线程,可以在UI中更改内容。只需放置
handler=newhandler();和startTimer()在oncreate()中,它将每400毫秒启动一次