Я использую принятое решение (слегка измененное) в течение некоторого времени и у меня не было никаких проблем с ним.

аюсь использовать камеру (android.graphics.Camera, а не аппаратную камеру), чтобы вращать холст вокруг определенной точки, в данном случае - середину холста.

В dispatchDraw (Canvas canvas) - для краткости я опускаю все не важные части.

camera.save();
   camera.rotateX(0);
   camera.rotateY(0);
   camera.rotateZ(angle);
   camera.getMatrix(cameraMatrix);
 camera.restore(); 

 canvas.concat( cameraMatrix );

Холст вращается, но всегда из левого верхнего угла.

ПРИМЕЧАНИЕ. Поскольку холст сконструирован так, чтобы он был больше, чем область отображения, мне также необходимо перевести конечный результат, чтобы он находился по центру экрана, поэтому я могу сделать это с помощью:

canvas.translate(xOffset,yOffset) PRIOR to calling the camera methods

ИЛИ ЖЕ

cameraMatrix.preTranslate(xOffset,yOffset) AFTER the camera methods

Оба корректно центрируют холст на дисплее, но я не могу получить точку поворота в качестве центра для вызова camera.rotateZ (angle), пытаясь использовать методы в примере 3D-андроида, но пока они работают для Ось X / Y, кажется, не влияет на ось Z

Любая помощь будет оценена, документы не совсем многословны.

Ответы на вопрос(2)

Ваш ответ на вопрос