通过代码更改imageview的图像属性

时间:2013-02-04 10:27:38

标签: android imageview

我想在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;}

}

我想在我的用户界面中从0到10继续计数,但是这个代码不能正常工作,任何人都可以告诉我这个问题,以便我可以修改它以便我可以继续。 提前谢谢

4 个答案:

答案 0 :(得分: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的时间。

答案 1 :(得分: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;}

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

答案 2 :(得分:0)

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

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);

答案 3 :(得分: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。这就是我建议你将来做的事情。