0

我想在android UI中更改imageview的图像(源代码)..无法使用我的代码来做到这一点我的代码如下:

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view);

    iv=(ImageView) findViewById(R.id.imageView11);

    Timer Tim=new Timer();
    Tim.schedule(new TimerTask() 
    {   @Override
        public void run() 
        {    runthread();   }
    },1000,1000);
}
public void runthread () {
    int x=0;
    if(x==0)
    {   iv.setImageResource(R.drawable.lcd);    }
    if(x==1)
    {   iv.setImageResource(R.drawable.lcd1);   }
    if(x==2)
    {   iv.setImageResource(R.drawable.lcd22);  }
    if(x==3)
    {   iv.setImageResource(R.drawable.lcd3);   }
    if(x==4)
    {   iv.setImageResource(R.drawable.lcd4);   }
    if(x==5)
    {   iv.setImageResource(R.drawable.lcd5);   }
    if(x==6)
    {   iv.setImageResource(R.drawable.lcd6);   }
    if(x==7)
    {   iv.setImageResource(R.drawable.lcd7);   }
    if(x==8)
    {   iv.setImageResource(R.drawable.lcd8);   }
    if(x==9)
    {   iv.setImageResource(R.drawable.lcd9);   }
    x=x+1;
    if(x==10){x=1;}

}

我想在我的 UI 中继续从 0 计数到 10,但是这段代码不能正常工作,谁能告诉我这个问题,以便我可以修改它以便我可以继续。提前致谢

4

4 回答 4

0

将您的x变量初始化为全局含义在您的方法之外对其进行初始化,不要继续在您的runthread()方法中对其进行初始化,您将始终得到 x=0 。

在你的最后一个条件下,把它改成这个

if(x==10){x=0;}

并且

将您的计时器放在 onWindowsFocusChanged() 覆盖该方法

@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
   Timer Tim=new Timer();
   Tim.schedule(new TimerTask() 
   {   @Override
       public void run() 
       {    runthread();   }
    },1000,1000);
}

因为 onWindowsFocusChanged() 表示您的布局已正确加载,这就是您可以操作 Imageview 的时间。

于 2013-02-04T10:36:01.097 回答
0

您的代码中缺少的东西,如下

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.Image)); 

所以

 public void runthread () {
    int x=0;
    if(x==0)
    {   iv.setImageDrawable(getResources().getDrawable(R.drawable.Image));   }
    if(x==1)
    {   iv.setImageDrawable(getResources().getDrawable(R.drawable.Image)); }
    if(x==2)
    {  iv.setImageDrawable(getResources().getDrawable(R.drawable.Image));  }
    if(x==3)
    {    iv.setImageDrawable(getResources().getDrawable(R.drawable.Image));   }
    if(x==4)
    {    iv.setImageDrawable(getResources().getDrawable(R.drawable.Image));  }
    if(x==5)
    {   iv.setImageDrawable(getResources().getDrawable(R.drawable.Image));  }
    if(x==6)
    {   iv.setImageDrawable(getResources().getDrawable(R.drawable.Image));   }
    if(x==7)
    {   iv.setImageDrawable(getResources().getDrawable(R.drawable.Image));   }
    if(x==8)
    {   iv.setImageDrawable(getResources().getDrawable(R.drawable.Image));   }
    if(x==9)
    {   iv.setImageDrawable(getResources().getDrawable(R.drawable.Image));   }
    x=x+1;
    if(x==10){x=1;}

更改图像名称并运行代码它将正常工作

于 2013-02-04T10:42:06.580 回答
0

1)不要使用这么多的“if语句”,它的脏代码

2) 你的 x 变量必须是全局的

3)使用这个

private int mX=0;

public void runthread () {
    switch(mX){
        case 0: iv.setImageResource(R.drawable.lcd); break;
        case 1: iv.setImageResource(R.drawable.lcd1); break;
        case 2: iv.setImageResource(R.drawable.lcd2); break;
        case 3: iv.setImageResource(R.drawable.lcd3); break;
        case 4: iv.setImageResource(R.drawable.lcd4); break;
        case 5: iv.setImageResource(R.drawable.lcd5); break;
        case 6: iv.setImageResource(R.drawable.lcd6); break;
        case 7: iv.setImageResource(R.drawable.lcd7); break;
        case 8: iv.setImageResource(R.drawable.lcd8); break;
        case 9: iv.setImageResource(R.drawable.lcd9); break;
    }
    mX = (mX+1) %10;
}

更新:

4) 也不要在另一个线程上更改 UI(正如 Simon 注意到的那样)。可以使用这个:

    Tim.schedule(new TimerTask(){
        public void run(){    
            runOnUiThread(new Runnable() { public void run() { runthread(); } });
        }
    },1000,1000);
于 2013-02-04T10:48:53.217 回答
0

根据 Corbella 提供的代码,这适用于不喜欢便捷方法的人,因为runOnUiThread (Runnable action). 详情在底部。

public class MainActivity extends Activity {
    private int mX;
    private Handler mHandler;
    private ImageView mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mHandler = new Handler();
        mImageView = (ImageView) findViewById(R.id.image_view);

        updateImageContinuouslyWithTimer();
    }

    private void updateImageContinuouslyWithTimer() {
        Timer timer = new Timer();

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                mHandler.post(new Runnable() {

                    @Override
                    public void run() {
                        runthread();
                    }
                });
            }
        }, 1000, 1000);
    }

    public void runthread() {
        switch (mX) {
        case 0:
            mImageView.setImageResource(R.drawable.lcd);
            break;
        case 1:
            mImageView.setImageResource(R.drawable.lcd1);
            break;
        case 2:
            mImageView.setImageResource(R.drawable.lcd2);
            break;
        case 3:
            mImageView.setImageResource(R.drawable.lcd3);
            break;
        case 4:
            mImageView.setImageResource(R.drawable.lcd4);
            break;
        case 5:
            mImageView.setImageResource(R.drawable.lcd5);
            break;
        case 6:
            mImageView.setImageResource(R.drawable.lcd6);
            break;
        case 7:
            mImageView.setImageResource(R.drawable.lcd7);
            break;
        case 8:
            mImageView.setImageResource(R.drawable.lcd8);
            break;
        case 9:
            mImageView.setImageResource(R.drawable.lcd9);
            break;
        }

        mX = (mX + 1) % 10;
    }
}

对于 XML 名称和代码的全长名称,它使用小写和下划线正确命名。当您编写代码时,您应该以可读性为目标,因为不遵循约定不仅会在未来让您感到困惑,还会让其他开发人员感到困惑。还要在成员变量前面加上 m。这就是我建议你以后做的事情。

于 2013-02-04T12:03:29.280 回答