我正在用原始目录中的gif图像制作动态壁纸,无论我使用什么设备,如何将gif放在屏幕中央?我知道为什么我的代码现在将其放在左侧,因为display.getWidth-display.getWidth = 0,并且与高度相同,因此(0,0)在左上方。但是什么是中心?我似乎无法弄清楚我的一生。该类扩展了WallpaperService。

@Override
    public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        super.onSurfaceChanged(holder, format, width, height);


        mScaleX = width / (1.5f*mNyan.width());
        mScaleY = height / (1.5f*mNyan.height());
        Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

        mWidth = (display.getWidth()-display.getWidth());
        mHeight = (display.getHeight()-display.getHeight());





        nyan();
    }


这就是我画画布的终点...

void nyanNyan(Canvas canvas) {

        canvas.save();
        canvas.scale(mScaleX, mScaleY);
        mNyan.setTime(mWhen);
        mNyan.draw(canvas, mWidth,mHeight);
        canvas.restore();
    }


谁能帮忙!?!我被困住了,无法超越。我也尝试过,没有运气:

void nyanNyan(Canvas canvas) {

        canvas.save();
        canvas.scale(mScaleX, mScaleY);
        mNyan.setTime(mWhen);
        mNyan.draw(canvas, mCenterX - mNyan.width() , mCenterY - mNyan.height());
    }

最佳答案

由于我不完全了解您的代码(例如mCenterX等var的来源或定义方式),因此我无法保证代码无需进一步调整即可正常运行。

假设您可以访问nyan的宽度和高度(我将其称为nyan.getWidth())和画布的尺寸,那么您上一次的mNyan.draw()调用应该看起来像这样:

mNyan.draw(
    canvas,
    ( canvas.getWidth() - nyan.getWidth() ) / 2,
    ( canvas.getHeight() - nyan.getHeight() ) / 2
);

09-10 03:20
查看更多