2011-12-11 64 views
0

我必须使用位图显示三个图像(dex5,dex6,dex7)。当我运行下面的代码时,图像会在屏幕上显示几毫秒,并且此过程不会结束。 首先如何保存更长时间的每个图像(像1秒)? 其次,我想继续这整个过程(显示每个图像1秒)30秒。如何根据时间停止这个过程?如何在使用位图时在屏幕上保存图像android

我的代码是:

public class DrawingTheImage extends View{ 

private Bitmap[] btm = new Bitmap[3]; 
int x , y; 
Random rand = new Random(); 
int i; 

public DrawingTheImage(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
    btm[0] = BitmapFactory.decodeResource(getResources(), R.drawable.dex5); 
    btm[1] = BitmapFactory.decodeResource(getResources(), R.drawable.dex6); 
    btm[2] = BitmapFactory.decodeResource(getResources(), R.drawable.dex7); 
    x = 0; 
    y = 250; 

} 
@Override 
protected void onDraw(Canvas canvas) { 
// TODO Auto-generated method stub 
super.onDraw(canvas); 
Random rand = new Random(); 
int i; 
boolean j; 
    i = rand.nextInt(3); 

    if (j = rand.nextBoolean()){   
     canvas.drawBitmap(btm[i], 100, y, null); 
    }else if (j = rand.nextBoolean()) { 
     canvas.drawBitmap(btm[i], 200, y, null);  
}else if(j = rand.nextBoolean()){ 
    canvas.drawBitmap(btm[i], 300, y, null); 
    } 
    invalidate(); 
    } 
} 

回答

0

的onDraw多次调用第二,我多久不知道。这是你看到闪烁的原因的一半。另一半是你的代码

int i; 
boolean j; 
i = rand.nextInt(3); 

if (j = rand.nextBoolean()){   
    canvas.drawBitmap(btm[i], 100, y, null); 
}else if (j = rand.nextBoolean()) { 
    canvas.drawBitmap(btm[i], 200, y, null);  
}else if(j = rand.nextBoolean()){ 
    canvas.drawBitmap(btm[i], 300, y, null); 
} 

此行

j = rand.nextBoolean() 

你有一个的if else if语句具有相同的条件意味着无论是第一条语句将执行或都不会的3。

要完成你想要完成的任务,你需要一些定时器,并且只有在定时器到期后才能改变图像。

long timer = 0; 
long delay = 30000; 
Bitmap image = null; 
public void changeImage(){ 

    if(delay < 0){ 
     //change image 
     int i = rand.nextInt(3); 
     image = btm[i]; 
     delay = 30000; 
    }else{ 
     delay -= (System.currentTimeMillis() - timer); 
    } 

    timer = System.currentTimeMillis(); 
} 

然后在您的onDraw方法,你只需要

changeImage(); 
canvas.drawBitmap(image,x,y,null); 
+0

我做了你说的,但我得到这个错误:E/AndroidRuntime(946):java.lang.NullPointerException – Ankita

+0

我修正了上述错误。但图像仍然显示为毫秒。我怎样才能让他们在屏幕上显示更长时间? – Ankita

+0

你试过iLate的回答吗?从onDraw()删除invalidate()? – triggs

0

的原因实际上是有一个在的onDraw方法invalidate()一个呼叫。调用invalidate会导致新的绘制过程,这将导致新的onDraw调用本身。所以你陷入了无尽的onDraw递归。你需要删除这个invalidate()。也不要在onDraw方法中创建新对象。由于触发器注意到onDraw被称为多次,即使没有无尽的递归,所以你应该不惜一切代价在那里创建对象。

相关问题