Java Android程序如何以时间间隔显示图片?
我对java编程一无所知。我为android制作了一个应用程序,根据IOIO板上4个数字输入的组合显示16幅可能的图片中的1幅。我用了一个IF语句(也许这不是最好的方法,但很有效),现在我的问题是:我不仅要显示一张图片,还要显示一系列图片(4或5),像动画一样显示 大概是这样的:Java Android程序如何以时间间隔显示图片?,java,android,Java,Android,我对java编程一无所知。我为android制作了一个应用程序,根据IOIO板上4个数字输入的组合显示16幅可能的图片中的1幅。我用了一个IF语句(也许这不是最好的方法,但很有效),现在我的问题是:我不仅要显示一张图片,还要显示一系列图片(4或5),像动画一样显示 大概是这样的: if ((((val1 == false)&& (val2 == true)) && (val3 == true)) && (val4 == true)){
if ((((val1 == false)&& (val2 == true)) && (val3 == true)) && (val4 == true)){
imagen.setImageResource(R.drawable.in1);
Thread.sleep(100);
imagen.setImageResource(R.drawable.in2);
Thread.sleep(100);
imagen.setImageResource(R.drawable.in3);
Thread.sleep(100);
imagen.setImageResource(R.drawable.in4);
Thread.sleep(100);
}
我尝试:
Thread.sleep(100);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是当我试图编译时,我有一个错误
还可以尝试:
Thread.sleep(100);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是这个应用程序不起作用。有什么建议吗
这是我的应用程序的代码:
package com.example.mycar;
import ioio.lib.api.DigitalInput;
import ioio.lib.api.exception.ConnectionLostException;
import ioio.lib.util.BaseIOIOLooper;
import ioio.lib.util.IOIOLooper;
import ioio.lib.util.android.IOIOActivity;
import android.os.Bundle;
import android.widget.ImageView;
public class MainActivity extends IOIOActivity {
boolean val1, val2, val3, val4;
ImageView imagen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imagen = (ImageView) findViewById(R.id.estado);
}
class Looper extends BaseIOIOLooper{
DigitalInput entrada1, entrada2, entrada3, entrada4;
@Override
protected void setup() throws ConnectionLostException,
InterruptedException {
// TODO Auto-generated method stub
entrada1 = ioio_.openDigitalInput(37, DigitalInput.Spec.Mode.PULL_UP);
entrada2 = ioio_.openDigitalInput(38, DigitalInput.Spec.Mode.PULL_UP);
entrada3 = ioio_.openDigitalInput(39, DigitalInput.Spec.Mode.PULL_UP);
entrada4 = ioio_.openDigitalInput(40, DigitalInput.Spec.Mode.PULL_UP);
}
@Override
public void loop() throws ConnectionLostException, InterruptedException {
// TODO Auto-generated method stub
val1 = entrada1.read();
val2 = entrada2.read();
val3 = entrada3.read();
val4 = entrada4.read();
mostrarentradas(val1, val2, val3, val4);
Thread.sleep(20);
}
}
@Override
protected IOIOLooper createIOIOLooper() {
// TODO Auto-generated method stub
return new Looper();
}
private void mostrarentradas(final boolean val1, final boolean val2, final boolean val3,
final boolean val4) {
// TODO Auto-generated method stub
runOnUiThread(new Runnable()
{
@Override
public void run() {
// TODO Auto-generated method stub
if ((((val1 == false)&& (val2 == true)) && (val3 == true)) && (val4 == true)){
imagen.setImageResource(R.drawable.in1);
}
if ((((val1 == false)&& (val2 == false)) && (val3 == true)) && (val4 == true)){
imagen.setImageResource(R.drawable.in8);
}
if ((((val1 == false)&& (val2 == false)) && (val3 == false)) && (val4 == true)){
imagen.setImageResource(R.drawable.in11);
}
if ((((val1 == false)&& (val2 == false)) && (val3 == false)) && (val4 == false)){
imagen.setImageResource(R.drawable.in14);
}
if ((((val1 == false)&& (val2 == true)) && (val3 == false)) && (val4 == true)){
imagen.setImageResource(R.drawable.in16);
}
if ((((val1 == false)&& (val2 == true)) && (val3 == true)) && (val4 == false)){
imagen.setImageResource(R.drawable.in22);
}
if ((((val1 == false)&& (val2 == false)) && (val3 == true)) && (val4 == false)){
imagen.setImageResource(R.drawable.in25);
}
if ((((val1 == false)&& (val2 == true)) && (val3 == false)) && (val4 == false)){
imagen.setImageResource(R.drawable.in29);
}
if ((((val1 == true)&& (val2 == false)) && (val3 == true)) && (val4 == true)){
imagen.setImageResource(R.drawable.in2);
//Thread.sleep(100);
imagen.setImageResource(R.drawable.in3);
}
if ((((val1 == true)&& (val2 == false)) && (val3 == false)) && (val4 == true)){
imagen.setImageResource(R.drawable.in18);
}
if ((((val1 == true)&& (val2 == false)) && (val3 == true)) && (val4 == false)){
imagen.setImageResource(R.drawable.in20);
}
if ((((val1 == true)&& (val2 == false)) && (val3 == false)) && (val4 == false)){
imagen.setImageResource(R.drawable.in27);
}
if ((((val1 == true)&& (val2 == true)) && (val3 == false)) && (val4 == true)){
imagen.setImageResource(R.drawable.in4);
}
if ((((val1 == true)&& (val2 == true)) && (val3 == false)) && (val4 == false)){
imagen.setImageResource(R.drawable.in30);
}
if ((((val1 == true)&& (val2 == true)) && (val3 == true)) && (val4 == false)){
imagen.setImageResource(R.drawable.in5);
}
if ((((val1 == true)&& (val2 == true)) && (val3 == true)) && (val4 == true)){
imagen.setImageResource(R.drawable.vwg0);
}
}
}
);
}
}是否可以使用
postdayed
方法和Runnable
?为此创建单独的线程太多了,而且您不能在UI线程之外更新视图
imagen.postDelayed(new Runnable(){
@Override
public void run(){
imagen.setImageResource(R.drawable.in1);
}
}, 1000); //1000ms delay
在
run
内部,您可以再次设置postdayed
方法读取线程的时间。如果你将UI线程置于睡眠状态,你的应用程序当然会停止响应。查看可运行程序和处理程序。但是我有一个错误
但是应用程序不工作
当然你还有更多的细节需要我们处理。你还没有告诉是关于错误或它如何“不工作”。如果您想要答案,请添加详细信息。就像一个侧节点一样,您可以将许多if语句放在一起。例如,您只需要检查一次val1==true
,然后就可以在它的主体中处理val1==true
的所有情况,以及val1==false
的所有情况。此外,使用else if
而不是许多if
语句,因为只有一个语句是真的。找到正确的案例后,将跳过其余案例