У меня проблема, которую я пытался решить почти 2 дня. (В итоге, переключившись на OpenGL: D) Во всяком случае ... У меня есть Canvas, и я пытаюсь сделать простую змеиную игру. Только для этой задачи представим себе змея состоит из 5х5 пикселей прямоугольников, он оставляет след (без клиринговой) и перемещение вправо от 0, 50 позиции ... вот код:Android Canvas weird shifting
public class Snake extends AnimationWallpaper {
@Override
public Engine onCreateEngine() {
return new SnakeEngine();
}
class SnakeEngine extends AnimationEngine {
int i = 0;
Paint paint = new Paint();
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);
// By default we don't get touch events, so enable them.
setTouchEventsEnabled(true);
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
super.onSurfaceChanged(holder, format, width, height);
}
@Override
public void onOffsetsChanged(float xOffset, float yOffset,
float xOffsetStep, float yOffsetStep, int xPixelOffset,
int yPixelOffset) {
super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep,
xPixelOffset, yPixelOffset);
}
@Override
public Bundle onCommand(String action, int x, int y, int z,
Bundle extras, boolean resultRequested) {
if ("android.wallpaper.tap".equals(action)) {
}
return super.onCommand(action, x, y, z, extras, resultRequested);
}
@Override
protected void drawFrame() {
SurfaceHolder holder = getSurfaceHolder();
Canvas c = null;
try {
c = holder.lockCanvas();
if (c != null) {
draw(c);
}
} finally {
if (c != null)
holder.unlockCanvasAndPost(c);
}
}
void draw(Canvas c) {
//c.save();
//c.drawColor(0xff000000);
paint.setAntiAlias(true);
// paint the fill
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
c.drawRect(i*5, 50, (i+1)*5, 55, paint);
//c.restore();
}
@Override
protected void iteration() {
i++;
super.iteration();
}
}
}
И вот выход:
И это еще не все, когда он рисует его любопытное смещение ... это означает, что вы видите, смещено в правую сторону, чтобы оно не actualy стоять на том же месте ...
Если у вас есть какие-либо идеи, почему это так, сообщите мне!
Нет, я не хочу ясного, актуального, я хочу опояснить. Но он должен нарисовать прямую линию вместо пунктирной ... это «сдвиг», о чем я говорю. Srsly не знаю, где проблема ... Я зарегистрировал фактические переменные, и они в порядке ... может быть, проблема с DPI? Не знаю... – arenaq