all! 我想弄清楚爲什麼我在Android視圖中的onTouchEvent方法有一個緩慢的響應。這是一個簡單的TicTacToe遊戲,我刪除了所有邏輯,只留下與問題有關的事情。 到目前爲止onTouchEvent方法獲取座標,然後調用只繪製一個圓圈的onDraw方法。 onDraw方法也繪製背景,即大小爲366 kB的960x1280 jpg文件。它的工作原理,但我有觸摸屏幕和繪製圓圈之間的延遲。在仿真器上幾秒鐘,在我的三星上約0.5秒。我注意到,沒有背景它完美的作品。但與此同時,這個問題似乎不在勾畫背景。我的意思是,如果我連續多次調用invalidate()幾次,他們都是即刻繪製的,我們只有在第一個數字之前纔會延遲。因此,據我所知,onTouchEvent方法反應有所不同,具體取決於是否有背景。 我一直在尋找,但我發現的唯一的東西是添加16毫秒的延遲(它在代碼中,評論),但它沒有幫助。
如果要拍一張較小的照片,我有更好的迴應,但我需要這張大照片來適應不同的手機。 所以最後,問題是響應時間取決於背景圖片的大小,但同時它不是繪製這張大圖片的問題,僅僅是爲了讓onTouchEvent停止。我很困惑 - )這怎麼可能? 請幫助我,如果你可以。Android視圖中帶有背景的onTouchEvent響應緩慢
下面是代碼:
public class GameViewBug extends View {
private Paint mCirclePaint;
private Bitmap bitmap;
private float touchX;
private float touchY;
public GameViewBug(Context context) {
super(context);
init();
}
public void init() {
mCirclePaint = new Paint();
mCirclePaint.setColor(Color.RED);
mCirclePaint.setStrokeWidth(10);
mCirclePaint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.kletka3);
canvas.drawBitmap(bitmap, 0, 0, null);
//canvas.drawColor(Color.WHITE);
canvas.drawCircle(touchX, touchY, 50, mCirclePaint);
}
public boolean onTouchEvent(MotionEvent event) {
// try {
// Thread.sleep(16);
// }catch (InterruptedException e) {}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
touchX = event.getX();
touchY = event.getY();
}
invalidate();
return true;
}
}
'onDraw'內的'BitmapFactory.decodeResource'?你沒有任何皮棉警告嗎? – pskink
我相信@ alex-shutov指出了爲什麼會發生這種情況。所以我建議你也這樣做。在其他地方調用decodeResource並將位圖發送到您的GameViewBug對象,然後調用invalidate()方法。 – saiful103a