我是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:
width:矩形的宽度
space:last rect和this rect之间的区别
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 :(得分: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.
答案 1 :(得分:0)
我相信你需要在drawFrame的开头再次将y和oldY设置为0。