비트 맵을 기반으로 메뉴를 만들려고합니다. 메뉴 자체는 screentouch 이동 이벤트를 통해 이동 가능해야하며, 기본적으로보기에서 단추를 드래그하려고합니다. 버튼에는 충돌 감지 기능이 포함되어있어 터치 할 때마다 서로 튀어 나오게됩니다.안드로이드에서 캔버스로 비트 맵을 그릴 때 깜박임
하지만 내 비트 맵을 그릴 때 어떤 문제가 있습니다. 현재 내 장치의 창에 맞게 비트 맵을 확장하기 위해 사각형을 사용하고 있습니다. 현재의 비트 맵을 부드럽게 움직여서 깜박 거리지 않고 싶습니다. gl을 여는 유일한 방법은 무엇입니까? 아니면 내 코드에서 큰 것을 놓쳤는가?
각 단추 그리기 내 표면보기입니다. 여기서 MenuButton은 비트 맵을 보유하고 터치 및 드래그 이동에 따라 위치를 업데이트하는 클래스입니다.
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
for(MenuButton menuButton : menuButtonSprites) {
menuButton.onDraw(canvas);
}
}
나는 비트 맵은 각 장치의 폭으로 확장하고 싶은 그것을 위해 난에 맞게 비트 맵의 사각형을 사용합니다.
public MenuButton(MenuView v, Bitmap bmp, int yPosition){
this.menuView = v;
this.menuButton = bmp;
this.xMax = v.getWidth();
this.yPosistion = yPosition;
menuButtonRectangle = new Rect(xMin, this.yPosistion-yMin, xMax, this.yPosistion+yMax);
}
public void update(int y){
if(menuButtonPressed)
{
this.yPosistion = y;
menuButtonRectangle.set(xMin, yPosistion-yMin, xMax, yPosistion+yMax);
}
}
public void onDraw(Canvas canvas){
canvas.drawBitmap(menuButton, null, menuButtonRectangle, null);
}
나는 또한 추첨을 업데이트하는 스레드를 가지고
public void run() {
long ticksPS = 1000/FPS;
long startTime;
long sleepTime;
Canvas c = null;
while (running) {
startTime = System.currentTimeMillis();
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
}
finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
sleepTime = ticksPS - (System.currentTimeMillis() - startTime);
try {
if (sleepTime > 0)
sleep(sleepTime);
else
sleep(10);
}
catch (Exception e) {
}
}
}
난 정말 내가 잘못 알고하지 않습니다 왜 내 단추를 부드럽게 움직일 수 없는지. 캔버스를 사용하는 것이 단점입니까, 아니면 정말 중요한 것을 놓친 것입니까? D?
Thx, 그래도 프레임 속도는 조정되었지만 성공하지 못했습니다. 나는 더블 버퍼링을 시도하고 다시 당신에게 돌아갈거야! – Ghostcloud
캔버스를 잠그고 그릴 때, 그리고 나중에 unlockCanvasAndPost (c)로 캔버스를 잠금 해제 할 때 이미 다음 프레임을 그리는 것 같습니다. [더블 버퍼링] (http://stackoverflow.com/questions/6538423/double-buffering-in-java-on-android-with-canvas-and-surfaceview) – Ghostcloud
Ohh Thats 괜찮아요. 정보 주셔서 감사합니다. 이 문제에 관해 다시 생각해보십시오. – Pavandroid