Я ожидаю, что вы пытаетесь создать эффект наклона / поворота карт Google, который я успешно выполнил для карт Google, поскольку они не думают, что нам нужно обновление ;-), и мне оно понадобилось для моего приложения, даже если выиспользуя ваши собственные плитки это в основном то же самое.
Одна вещь, которая помогает, это понять, что повороты для матрицы камеры выполняются в верхнем левом углу.
Таким образом, вы должны преобразоваться в соответствующее место (в зависимости от оси вращения и ожидаемых результатов), а затем обратно, что-то вроде ... эффекты, которые вы получаете, были очень похожи на мои, прежде чем я прочитал документы ипонял это.
camera.save();
camera.rotateX(tilt); // tilt forward or backward
camera.rotateY(0);
camera.rotateZ(angle); // Rotate around Z access (similar to canvas.rotate)
camera.getMatrix(cameraMatrix);
// This moves the center of the view into the upper left corner (0,0)
// which is necessary because Matrix always uses 0,0, as it's transform point
// use the center of the canvas, or the bottom center dependent on your results
cameraMatrix.preTranslate(-centerX, -centerY);
// NOTE: Camera Rotations logically happen here when the canvas has the matrix applied
// This happens after the camera rotations are applied, moving the view back to
// where it belongs, allowing us to rotate around the center or any point we choose
// Move it back after the rotations are applied
cameraMatrix.postTranslate(centerX, centerY);
camera.restore();
canvas.concat(cameraMatrix);
Другая вещь, которую нужно сделать, это увеличить размер контейнера, чтобы у вас не было пустого пространства (или, по крайней мере, ограничить его) после операций наклона / поворота, вы можете сделать это, рассчитав необходимый размер.диагональ вашего дисплея работает для базового поворота, + процент в зависимости от наклона, если вы используете это.
Игра с pre / postTranslate может дать вам интересные результаты.
Что касается перемещения растрового изображения, я не совсем уверен, почему вы делаете это, возможно панорамирование, но пока холст заполняется, это не должно иметь значения
Обновление
Вот как я увеличил размер холста, я попытался использовать LayoutParams, чтобы сделать это, но мне не очень повезло с этим, поэтому Мера была для меня способом.
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
if (!isInEditMode())
super.onMeasure(View.MeasureSpec.makeMeasureSpec(scaledDimensionsW,
View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(scaledDimensionsH,
View.MeasureSpec.EXACTLY));
else
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}