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

我的代码是:

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

===============>>#1 票数: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条件条件为3的if else if语句,这意味着第一个语句将执行,否则将不执行。

要完成您想完成的任务,您需要某种计时器,并且仅在计时器到期后才更改图像。

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

===============>>#2 票数:0

原因实际上是在onDraw方法中调用了invalidate() 调用invalidate将导致新的绘图传递,这将导致对onDraw本身的新调用。 因此,您陷入了无尽的onDraw递归中。 您需要删除此invalidate() 也不要在onDraw方法中创建新对象。 正如triggs指出的那样,即使没有无限递归,也会多次调用onDraw,因此您应该不惜一切代价避免在那里创建对象。

  ask by Ankita translate from so

未解决问题?本站智能推荐:

1回复

RelativeLayout-将片段保留在底部

这是我的代码: 最后一个FrameLayout包含一个带有一些按钮的片段。 此FrameLayout应保留在屏幕底部。 但是使用此代码,片段buttonsFragment2不会显示在我的智能手机上。 我只在顶部看到buttonsFragment1 ,可以向下滚动LinearLa
4回复

如何在前一个屏幕android中使用给定输入数字的edittext,textview和图像创建动态布局?

嗨,在上一个屏幕中,例如:如果用户选择2,那么在下一个屏幕中我需要显示为, 静态图像>后跟学生编号1. - > TextView 学生姓名 - > TextView - > EditText 滚动否------> TextView - > E
1回复

如何在Android中裁剪位图的重叠区域?

目前,我在相机表面视图上方有一个叠加图像。 我只想输出与上层重叠的照片部分。 到目前为止,我可以合并两个图像,这意味着,重叠层位于相机视图的顶部。 但是,如何仅在输出中获得覆盖部分? 谢谢
1回复

如何在Android上滚动时更改图像

我是Android开发的初学者,正在尝试构建我的第一个应用程序。 我有一个带有圆形目标图像的活动,我想使该图像在向下滚动时消失,并显示另一个图像,该图像将与工具栏对齐(请参见下面的示例图像)。 我已经对此进行了研究,但只发现了有关在图像消失的应用程序中使用效果的信息。 也许协调器布局在
2回复

在Android中加载屏幕时出错

当我尝试加载屏幕时,出现错误。 它具有相对布局,内部具有表格布局。 错误与屏幕膨胀有关,所以我认为这是相关的。 我的xml: 还有我的清单,以防万一 除了通常的OnCreate和onCreateOptionsMenu外,这些屏幕没有其他代码。 当然,setConten
1回复

在打开Android的Softkeyboard时将标题停留在顶部

我有一个布局,在该布局中,我需要在打开softKeyBoard时不隐藏顶部标题。 我在这里使用Fragment.reacylerView。 当我打开软键盘时,顶部标题会向上滚动。 我需要该标题保留在那里,并在Recyclerview中滚动。 下面是我的xml。
1回复

使用onTouchEvent保存绘制到位图上的图像

我试图触摸我的应用程序的区域以在屏幕上放置一个AND门。 因此,当我触摸“与”门区域,然后再次触摸以将其放置在电路上时,门会在我触摸的位置绘制,但是一旦我再次触摸,它就会消失。 香港专业教育学院使用canvas.drawBitmap静态创建了一个电路,它们出现并停留。 意思是,香港专业
1回复

Android位图着色

我只是在学习Android的媒体功能,我对位图有一些疑问,这里是应用程序: 我的问题:如何制作应用程序,以便单击“圆圈”内的某个位置以填充特定的颜色? 这是我使用的代码:
2回复

Android TranslateAnimation-将图像从屏幕右侧移动到屏幕中

我现在很绝望,我真的很需要帮助。 我希望图像从屏幕右侧移入其中。 最初,图像存在于屏幕区域之外。 但是,基于事件,我希望它滑入。 有谁知道该怎么做? 我在在线教程( http://developerlife.com/tutorials/?p=343 )中阅读到,如果“动画效果超
3回复

Android:定位图片?

如何在以下布局中放置图像... 其中每个I = imageview。