Я играю анимацию, где все кадры одинаковой высоты, но различной ширины. Все хорошо, но я хотел бы применить некоторые преобразования, используя матрицу для лучшей производительности.Матричное зеркало и масштаб
На первом кадре:
- Я случайно решить, если я хочу, чтобы применить зеркальную матрицу
- измерить высоту, чтобы увидеть, если мне нужно, чтобы применить шкалу вниз матрицу.
Ниже приведен код, который почти работает. Как-то это не согласовано, а рамки иногда центрируются и иногда смещаются. У меня нет опыта работы с матрицами, поэтому я был бы признателен, если кто-то с большим количеством знаний может подтвердить/исправить/улучшить процедуру преобразования. Эта матрица поставляется с методом рисования холста.
Кроме того, я хотел бы контролировать:
- если масштаб вниз требуется масштаб вплоть до точной высоты (высота моего единственного значение ориентации)
- может матрицу использоваться таким образом, чтобы все кадры будут нарисованы дно-центр?
редактировать: Я предполагаю, что я могу контролировать точное масштабирование вниз размер и нижнее положение центра с screenRect (назначения Rect)?
Basic урезанного кода:
RectF screenRect = new RectF(0, 0, ((float) displayWith), ((float) displayHeight));
Matrix mirror = null;
if (isMirror) {
mirror = new Matrix();
mirror.setScale(-1, 1);
mirror.postTranslate(p.x, 0); // position X back to original point
}
Matrix scale = null;
if (isScaleDown) { // down-scale
scale = new Matrix();
scale.setRectToRect(imageRect, screenRect, Matrix.ScaleToFit.CENTER);
}
// COMBINED TRANSFORMATION MATRIX
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Matrix trans = null;
if (scale != null) trans = scale;
if (mirror != null && trans == null) trans = mirror;
if (mirror != null && trans != null) trans.setConcat(trans, mirror);
return trans;