Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 - Fatal编程技术网

Java 在特定时间更改图像

Java 在特定时间更改图像,java,android,Java,Android,我正在做一个android studio项目,试图让图像每半小时改变一次, 我学习了一个例子,但我没有运气;它不会出错,只是不起作用,这就是我所拥有的 我试过的是: public class MainActivity extends AppCompatActivity { long startTime = 0; Handler feed = new Handler(); Runnable runTimer = new Runnable() { @Override public

我正在做一个android studio项目,试图让图像每半小时改变一次, 我学习了一个例子,但我没有运气;它不会出错,只是不起作用,这就是我所拥有的 我试过的是:

public class MainActivity extends AppCompatActivity {

long startTime = 0;
Handler feed = new Handler();
Runnable runTimer = new Runnable()
{
    @Override
    public void run() {
        Calendar now = Calendar.getInstance();
        TextView output = (TextView) findViewById(R.id.output);
        ImageView roto = (ImageView) findViewById(R.id.earthView);
        Globals g = (Globals) getApplication();
        int vision = 0;
        int visionb = 0;
        int hour = now.get(Calendar.HOUR);
        int minute = now.get(Calendar.MINUTE);
        String[] epos = g.getData56();

        if (minute >= 30) {
            visionb = 1;
        }
        if (minute < 30) {
            visionb = 0;
        }
        long millis = System.currentTimeMillis() - startTime;
        int seconds = (int) (millis / 1000);
        int minutes = seconds / 60;
        seconds = seconds % 60;
        output.setText(String.format("%d:%02d", minutes, seconds));
        vision = ((hour * 2) + visionb);
        int resID = getResources().getIdentifier(epos[vision], "drawable", getPackageName());
        if (roto != null) {
            roto.setImageResource(resID);
            feed.postDelayed(this, 500); // tried moving this around and changing the value from 0 - 3000
        }
        startTime = System.currentTimeMillis();
        feed.postDelayed(runTimer, 500); // tried moving this around and changing the value from 0 - 3000
    }
};
public类MainActivity扩展了AppCompatActivity{
长起始时间=0;
Handler提要=新的Handler();
Runnable runTimer=new Runnable()
{
@凌驾
公开募捐{
Calendar now=Calendar.getInstance();
TextView输出=(TextView)findViewById(R.id.output);
ImageView roto=(ImageView)findViewById(R.id.earthView);
Globals g=(Globals)getApplication();
int vision=0;
int-visionb=0;
int hour=now.get(Calendar.hour);
int minute=now.get(Calendar.minute);
字符串[]epos=g.getData56();
如果(分钟>=30){
visionb=1;
}
如果(分钟<30){
visionb=0;
}
long millis=System.currentTimeMillis()-startTime;
整数秒=(整数)(毫秒/1000);
整数分钟=秒/60;
秒=秒%60;
output.setText(String.format(“%d:%02d”,分,秒));
视力=((小时*2)+visionb);
int resID=getResources().getIdentifier(epos[vision],“drawable”,getPackageName());
if(roto!=null){
旋转图像资源(剩余);
feed.postDelayed(this,500);//尝试将其四处移动并将值从0更改为3000
}
startTime=System.currentTimeMillis();
feed.postDelayed(runTimer,500);//尝试将其四处移动并将值从0更改为3000
}
};
为了测试我的代码,我将其放入一个onUserInteraction方法中,它工作得非常好:

    @Override
    public void onUserInteraction() {
    super.onUserInteraction();
    final Globals g = (Globals) getApplication();
    Calendar now = Calendar.getInstance();
    ImageView roto = (ImageView) findViewById(R.id.earthView);
    int vision = 0;
    int visionb = 0;
    int hour = now.get(Calendar.HOUR);
    int minute = now.get(Calendar.MINUTE);
    String[] epos = g.getData56();

    if (minute >= 30) {
        visionb = 1;
    }
    if (minute < 30) {
        visionb = 0;
    }
    vision = ((hour * 2) + visionb);
    int resID = getResources().getIdentifier(epos[vision], "drawable", getPackageName());
    if (roto != null) {
        roto.setImageResource(resID);
    }
}
@覆盖
公共关系{
super.onUserInteraction();
final Globals g=(Globals)getApplication();
Calendar now=Calendar.getInstance();
ImageView roto=(ImageView)findViewById(R.id.earthView);
int vision=0;
int-visionb=0;
int hour=now.get(Calendar.hour);
int minute=now.get(Calendar.minute);
字符串[]epos=g.getData56();
如果(分钟>=30){
visionb=1;
}
如果(分钟<30){
visionb=0;
}
视力=((小时*2)+visionb);
int resID=getResources().getIdentifier(epos[vision],“drawable”,getPackageName());
if(roto!=null){
旋转图像资源(剩余);
}
}
所以我假设我做错了什么,有人知道我做错了什么或错过了什么吗

谢谢你的帮助着陆这是工作结果,给了我一个时钟和每1/2小时 当天的改变我的形象(共有48张图片),再次感谢您的帮助

long startTime = 0;
{
final Handler feed = new Handler();
final Runnable runTimer = new Runnable() {
    @Override
    public void run() {

        Calendar now = Calendar.getInstance();
        TextView output = (TextView) findViewById(R.id.output);
        ImageView roto = (ImageView) findViewById(R.id.earthView);
        Globals g = (Globals) getApplication();
        int vision = 0;
        int visionb = 0;
        int second = now.get(Calendar.SECOND);
        int hour = now.get(Calendar.HOUR);
        int minute = now.get(Calendar.MINUTE);
        String[] epos = g.getData56();
        if (minute >= 30) {visionb = 1;}               
        if (minute < 30) {visionb = 0;}
        output.setText(String.format(hour + ":" + minute + ":" + second));
        feed.postDelayed(this, 0);
        if (minute == 30 || minute == 0) {vision = ((hour * 2) + visionb);
            int resID = getResources().getIdentifier(epos[vision], "drawable", getPackageName());
            if (roto != null) {
            roto.setImageResource(resID);
            }
        }
        startTime = System.currentTimeMillis();
    }
};
feed.postDelayed(runTimer,1000);
}
long startTime=0;
{
最终处理程序提要=新处理程序();
final Runnable runTimer=new Runnable(){
@凌驾
公开募捐{
Calendar now=Calendar.getInstance();
TextView输出=(TextView)findViewById(R.id.output);
ImageView roto=(ImageView)findViewById(R.id.earthView);
Globals g=(Globals)getApplication();
int vision=0;
int-visionb=0;
int second=now.get(Calendar.second);
int hour=now.get(Calendar.hour);
int minute=now.get(Calendar.minute);
字符串[]epos=g.getData56();
如果(分钟>=30){visionnb=1;}
如果(分钟<30){visionnb=0;}
output.setText(String.format(小时+“:“+分钟+”:“+秒));
feed.postDelayed(这个,0);
如果(分钟==30 | |分钟==0){vision=((小时*2)+visionb);
int resID=getResources().getIdentifier(epos[vision],“drawable”,getPackageName());
if(roto!=null){
旋转图像资源(剩余);
}
}
startTime=System.currentTimeMillis();
}
};
feed.postDelayed(运行计时器,1000);
}
您可以尝试以下答案:


我想你忘了安排第一次投递。 这是一个使用Handler和Runnable计划定期事件的示例。 该行计划第一次运行

handler.post(runTimer);
run()中的这一行为运行时的后续事件安排时间:

handler.postDelayed(this, 1000);
注意1000意味着一秒钟。因此30分钟将是60*1000*30,在你的情况下是1800000

例如:

public class MainActivity extends AppCompatActivity {

    TextView mTextView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.textview);

        final Handler handler = new Handler();
        Runnable runTimer = new Runnable()
        {
            @Override
            public void run() {
                mTextView.setText("Current Time: " + (new Date()).toString());
                handler.postDelayed(this, 1000);
            }
        };

        handler.post(runTimer);
    }
}
此外,您可能希望通过以下方式删除计划的延迟事件来停止循环:

handler.removeCallbacks(runTimer);

谢谢你,是的,这就是我所做的,我没有在第一篇文章中使用handler.post(runTimer)在错误的位置
handler.removeCallbacks(runTimer);