我想在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继续计数,但是这个代码不能正常工作,任何人都可以告诉我这个问题,以便我可以修改它以便我可以继续。 提前谢谢
答案 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。这就是我建议你将来做的事情。