я пытаюсь использовать камеру (android.graphics.Camera, а не аппаратную камеру), чтобы повернуть холст видов вокруг определенной точки, в данном случае середины холста.
В dispatchDraw (холст холста) - для краткости я опускаю все неважные части.
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
Оба правильно центрируют холст в display, но я не могу заставить точку вращения быть центром для вызова camera.rotateZ (angle), пробовал использовать методы в образце 3D Android, но, хотя они, похоже, работают для оси X / Y, они не Кажется, что t влияет на ось Z
Любая помощь приветствуется, документы не совсем подробные.