【问题标题】:Android ImageView not refreshingAndroid ImageView 不刷新
【发布时间】:2013-06-02 08:17:42
【问题描述】:

我已经动态创建了四个 ImageView,当我单击一个按钮时,我想在一秒钟后更改每个图像,但它们都会在四秒钟后更改。谁能给我一个关于这个问题的建议?

public void Run_Click(View view) {
    int j=10;
    try {
        while(true) {
             if(j<14) {
                 im=(ImageView)findViewById(j);
                 im.setImageResource(R.drawable.open);
                 Thread.sleep(1000);
                 j++;
             } else {
                 j=10;
                 for(int i=10;i<14;i++) {
                     im=(ImageView)findViewById(i);
                     im.setImageResource(R.drawable.close);
                 }
                 Thread.sleep(2000);
              }
    }

【问题讨论】:

  • 我希望你没有在 UI 线程中睡觉?如果不在 UI 线程中,则无法从该线程修改 UI 元素。

标签: android android-imageview android-view


【解决方案1】:

您正在 UI 线程中睡觉,这是一种非常糟糕的方法。

请看here:

public void addFrame(可绘制帧,int 持续时间)

在 API 级别 1 中添加 向动画添加帧

参数 frame 要添加的帧 持续时间 多长时间(以毫秒为单位) 框架应该出现

并使用 addFrame 方法。

你只需要指定一个 Drawable 和一个持续时间。

【讨论】:

    【解决方案2】:

    您不应该使用 thread.sleep(),这是一种糟糕的设计方法。在 ui 线程上调用 thread.sleep() 是不好的设计。即使你使用线程做一些计算,也不要使用 thread.sleep()。

    如果您实现 Thread 或 HandlerThread,请确保您的 UI 线程在等待工作线程完成时不会阻塞——不要调用 Thread.wait() 或 Thread.sleep()。与其在等待工作线程完成时阻塞,不如为其他线程提供一个处理程序,以便在完成时回发。

    http://developer.android.com/training/articles/perf-anr.html

    您可以尝试链接中提到的一些选项,例如处理程序、动画绘制和计时器任务

    setBackgroundResource doesn't set the image

    【讨论】:

      猜你喜欢
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      相关资源
      最近更新 更多