Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 在两个图像之间循环_Java_Android_Imageview_Android Imageview_Picasso - Fatal编程技术网

Java 在两个图像之间循环

Java 在两个图像之间循环,java,android,imageview,android-imageview,picasso,Java,Android,Imageview,Android Imageview,Picasso,我想在两个图像之间连续循环。第一个图像应无限地替换为第二个图像,第二个图像应无限地替换为第一个图像 到目前为止,我掌握的代码如下: imageHandler = new Handler(); imageHandler.postDelayed(new Runnable() { @Override public void run() { Picasso.with(TokenActivity.this).load(R.drawable.a

我想在两个图像之间连续循环。第一个图像应无限地替换为第二个图像,第二个图像应无限地替换为第一个图像

到目前为止,我掌握的代码如下:

imageHandler = new Handler();
    imageHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Picasso.with(TokenActivity.this).load(R.drawable.app_icon).into(iconImageView);
        }
    }, 1000);
    imageHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Picasso.with(TokenActivity.this).load(R.drawable.camera_icon).into(iconImageView);
        }
    }, 2000);

在这里,翻转正在发生,但只有一次。如何编程使其可以无限重复?

声明两个可运行:

Runnable goToImage2;
Runnable goToImage1 = new Runnable() {
  @Override
  public void run() {
   Picasso.with(TokenActivity.this).load(R.drawable.app_icon).into(iconImageView);
  handler.postDelayed(goToImage2, 2000);
  }
}
goToImage2 = new Runnable() {
  @Override
  public void run() {
   Picasso.with(TokenActivity.this).load(R.drawable.camera_icon).into(iconImageView);
  handler.postDelayed(goToImage1, 2000);
  }
}
然后只需启动第一个:

handler.postDelayed(goToImage1,0)

编辑:如果您只需要两个图像,也可以简单地使用布尔值来知道要显示哪一个图像,因此只使用一个可运行的:

Runnable goToImage2;
Runnable goToImage1 = new Runnable() {
  @Override
  public void run() {
   Picasso.with(TokenActivity.this).load(R.drawable.app_icon).into(iconImageView);
  handler.postDelayed(goToImage2, 2000);
  }
}
goToImage2 = new Runnable() {
  @Override
  public void run() {
   Picasso.with(TokenActivity.this).load(R.drawable.camera_icon).into(iconImageView);
  handler.postDelayed(goToImage1, 2000);
  }
}
布尔值isShowingFirst=true

Runnable changeImage = new Runnable() {
  @Override
  public void run() {
   Picasso.with(TokenActivity.this).load(isShowingFirst ? R.drawable.camera_icon : R.drawable.app_icon).into(iconImageView);
  isShowingFirst = !isShowingFirst;
  handler.postDelayed(changeImage, 2000);
  }
}
并通过以下方式启动:

handler.postDelayed(changeImage, 0);

声明两个可运行:

Runnable goToImage2;
Runnable goToImage1 = new Runnable() {
  @Override
  public void run() {
   Picasso.with(TokenActivity.this).load(R.drawable.app_icon).into(iconImageView);
  handler.postDelayed(goToImage2, 2000);
  }
}
goToImage2 = new Runnable() {
  @Override
  public void run() {
   Picasso.with(TokenActivity.this).load(R.drawable.camera_icon).into(iconImageView);
  handler.postDelayed(goToImage1, 2000);
  }
}
然后只需启动第一个:

handler.postDelayed(goToImage1,0)

编辑:如果您只需要两个图像,也可以简单地使用布尔值来知道要显示哪一个图像,因此只使用一个可运行的:

Runnable goToImage2;
Runnable goToImage1 = new Runnable() {
  @Override
  public void run() {
   Picasso.with(TokenActivity.this).load(R.drawable.app_icon).into(iconImageView);
  handler.postDelayed(goToImage2, 2000);
  }
}
goToImage2 = new Runnable() {
  @Override
  public void run() {
   Picasso.with(TokenActivity.this).load(R.drawable.camera_icon).into(iconImageView);
  handler.postDelayed(goToImage1, 2000);
  }
}
布尔值isShowingFirst=true

Runnable changeImage = new Runnable() {
  @Override
  public void run() {
   Picasso.with(TokenActivity.this).load(isShowingFirst ? R.drawable.camera_icon : R.drawable.app_icon).into(iconImageView);
  isShowingFirst = !isShowingFirst;
  handler.postDelayed(changeImage, 2000);
  }
}
并通过以下方式启动:

handler.postDelayed(changeImage, 0);

我的建议是用一个线程来简化整个过程

new Thread(new Runnable(){

    public void run(){
        while(true){
            Picasso.with(TokenActivity.this).load(R.drawable.app_icon).into(iconImageView);

            this.sleep(2000);

            Picasso.with(TokenActivity.this).load(R.drawable.camera_icon).into(iconImageView);


            this.sleep(2000);
        }
    }

}).start();

对这个答案持保留态度,因为它可能并不完全是您想要实现它的方式。

我的建议是用一个线程简化整个过程

new Thread(new Runnable(){

    public void run(){
        while(true){
            Picasso.with(TokenActivity.this).load(R.drawable.app_icon).into(iconImageView);

            this.sleep(2000);

            Picasso.with(TokenActivity.this).load(R.drawable.camera_icon).into(iconImageView);


            this.sleep(2000);
        }
    }

}).start();

对这个答案持保留态度,因为它可能不完全是您想要实现它的方式。

第一个
可运行的
不会识别
handler.postDelayed语句中的
goToImage2
(goToImage2,2000)?因为没有声明或定义?如果是这种情况,只需查看我的编辑,在前面声明第二个,但在后面实现它。这只是一个小问题,因为我正在访问
运行
中的第二个runnable,它必须声明为final,如果它被声明为
final
,“可能未初始化”错误正在显示。如果您在类中而不是在函数中声明它们,则不会出现,我的错误。抱歉。语句
handler.postDelayed(gotoimage22000)中的第一个
runnable
不识别
goToImage2
?因为没有声明或定义?如果是这种情况,只需查看我的编辑,在前面声明第二个,但在后面实现它。这只是一个小问题,因为我正在访问
运行
中的第二个runnable,它必须声明为final,如果它被声明为
final
,“可能未初始化”错误正在显示。如果您在类中而不是在函数中声明它们,则不会出现,我的错误。很抱歉