ビットマップに基づいてメニューを作成しようとしています。メニュー自体は、screentouchの移動イベントを通して移動可能でなければなりません。基本的には、ビュー上でボタンをドラッグします。ボタンには衝突検出も含まれているため、タッチするたびに互いから跳ね返ります。Androidでキャンバスでビットマップを描画するときにちらつく
しかし、ビットマップの描画にはいくつか問題があります。現在、デバイスのウィンドウに合わせてビットマップのサイズを変更するために四角形を使用しています。私が欲しいと思っているのは、現時点では私のビットマップを滑らかに動かすことはできません。 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) {
}
}
}
私は本当に私が間違ってやっているのか分かりませんなぜ私は自分のボタンの動きを滑らかにすることができないのか。キャンバスを使用することは欠点ですか、それとも本当に重要なことを忘れてしまったのですか?
Thxでは、フレームレートを調整するテストが行われていますが、成功することはありません。私はダブルバッファリングを試み、あなたに戻ってきます! – Ghostcloud
これは、キャンバスをロックして描画し、後でunlockCanvasAndPost(c)でキャンバスをアンロックすると、次のフレームを描画しているようです。 [ダブルバッファリング](http://stackoverflow.com/questions/6538423/double-buffering-in-java-on-android-with-canvas-and-surfaceview) – Ghostcloud
Ohh Thats fine。情報をありがとう。この問題について再考する。 – Pavandroid