Почему мои живые обои реагируют с задержкой на прикосновение к событиям? - PullRequest
0 голосов
/ 22 июня 2019

Привет, я новичок в разработке для Android и пытаюсь создать простые живые обои для Android. У меня есть четыре PNG изображения. Обои изменяют фоновое изображение в соответствии с положением касания пользователя. Например, если пользователь не касается экрана, обои - down.png. Если пользователь касается левой части экрана, обои изменяются на left.png и т. Д.

Это класс BCWallpaperEngine, который расширяет Engine:

 @Override
        public void onTouchEvent(MotionEvent e) {

            float x = e.getX();
            switch (e.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    if (x < getDesiredMinimumWidth()/4) {
                        //right image
                        setSceneBackground(pawStatus.RIGHT);
                    }
                    else if(x < getDesiredMinimumWidth()*3/4){
                        //middle image
                        setSceneBackground(pawStatus.UP);
                    }else{
                        //left image
                        setSceneBackground(pawStatus.LEFT);
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    setSceneBackground(pawStatus.DOWN);
            }
            drawFrame();
            super.onTouchEvent(e);
        }

Это класс BCWallpaperService, который расширяет WallpaperService:

void setSceneBackground(pawStatus paw) {
        Bitmap b;

        switch(paw){
            case UP:
                b = BitmapFactory.decodeResource(getResources(), R.drawable.up);
                //BitmapFactory.decodeFile("/sdcard/test2.png");
                break;
            case RIGHT:
                b = BitmapFactory.decodeResource(getResources(), R.drawable.right);
                break;
            case LEFT:
                b = BitmapFactory.decodeResource(getResources(), R.drawable.left);
                break;
            default:
                b = BitmapFactory.decodeResource(getResources(), R.drawable.down);
        }

        if (null != mSceneBitmap)mSceneBitmap.recycle();

        Matrix m = new Matrix();
        m.setScale((float)mWallpaperWidth / (float)b.getWidth(),
                (float)mWallpaperHeight / (float)b.getHeight());
        mSceneBitmap = Bitmap.createBitmap(b, 0, 0,
                b.getWidth(), b.getHeight(), m, true);

        b.recycle();
    }

Программа работает, но между касанием и сменой обоев существует огромная задержка (1-2 с).

Я уже сделал эти обои в процессе обработки, где они работают без задержки, но сейчас я пытаюсь реализовать их в Android Studio, чтобы добавить новые функции.

...