2013-06-11 174 views
0

我是新来的android编程,并遇到一个小问题。如果你能帮忙,那将不胜感激。绘制矩形画布android

我提出长方形的动态壁纸我使用制作:

void drawFrame() { 
     final SurfaceHolder holder = getSurfaceHolder(); 

     Canvas c = null; 
     try { 
      c = holder.lockCanvas(); 
      if (c != null) { 
       Paint paint = new Paint(); 
       paint.setColor(Color.CYAN); 
       Paint ypaint = new Paint(); 
       ypaint.setColor(Color.RED); 
       Paint ppaint = new Paint(); 
       ppaint.setColor(Color.GREEN); 

       drawVerStripes(c, ppaint, 0,20); 
       drawVerStripes(c, paint, 50,20); 
       drawVerStripes(c, ypaint,0,10); 
      } 

     } finally { 
      if (c != null) 
       holder.unlockCanvasAndPost(c); 
     } 

功能:

PARAMS:
宽度:矩形的宽度
空间:之间的区别最后一个和这个矩形

int y=0; 
    int oldY=0; 
    private void drawVerStripes(Canvas c, Paint paint, int space, int width) { 


     y=oldY+space; 

     c.drawRect(y, 0, y+width,c.getHeight(), paint); 

     oldY=y; 
    } 

结果是矩形很快移动到屏幕的一侧。我希望他们留在屏幕上,并且不能移动
换句话说,有没有一种方法drawVerStripes只执行一次而不是每一帧。

+0

你的问题是什么? – Raghunandan

回答

0

您的drawFrame方法在每帧中调用。如果你的设备刷新率是70,那么你的方法被称为每秒70次。如果将x或y坐标增加1,则在x或y坐标中移动70个像素。你应该做刷新率独立运动。

1)计算增量时间,即自上次屏幕更新后经过的时间。 2)确定你想让矩形每秒移动多少个像素。

假设你想让你的矩形在x中移动50个像素。

然后执行以下操作。 x + = deltaTime * 50.

long startTime = System.nanoTime(); // Execute before the first time your drawFrame executes 
float deltaTime = (System.nanoTime()-startTime)/1000000000.0f; // In drawFrame method calculate 
long startTime = System.nanoTime(); // Execute after calculating delta time. 
+0

其实,我不想让它移动...... –

+0

然后只需要一个叫做ranOnce的布尔变量。然后将其设置为false。并在if(!ranOnce)中打包调用drawVerStripes。另外在调用drawVerStripes之后,设置了ranOnce = true – neo

+0

不知道为什么,但是在做完之后,rects不显示出来......'boolean ranOnce = false; \t如果(ranOnce!){ \t \t \t \t \t drawVerStripes(C,ppaint,0,20); \t \t \t \t \t drawVerStripes(c,paint,50,20); \t \t \t \t \t drawVerStripes(c,ypaint,0,10); \t \t \t \t \t ranOnce = true; \t \t \t \t \t}' –

0

我相信你需要在drawFrame的开头再次设置y和oldY为0。