вращение матрицы в одном направлении

есть ли способ заставить матрицу изображения вращаться только в одном направлении, т.е. против часовой стрелки?

это моя функция поворота

void rotate(int x, int y) {

        this.matrix.postRotate((float) (this.startAngle - this.currentAngle),
                x, y);
    }

и это ма onTouch событие

case MotionEvent.ACTION_MOVE:

            ring_gear.setCurrentAngle((float) ring_gear.getAngle(
                    event.getX(), event.getY()));
            ring_gear.rotate(ring_gear.Width / 2, ring_gear.Height / 2);

            ring.setImageMatrix(ring_gear.matrix);

            ring_gear.startAngle = ring_gear.currentAngle;

person Fawzinov    schedule 23.09.2014    source источник


Ответы (1)


Вы всегда делаете postRotate. Это объединяет предыдущее вращение с текущим, эффективно добавляя угол к вращению при каждом событии перемещения.

Если я правильно понял, что вы пытаетесь сделать (переместить кольцо в положение пальца), то вам нужно просто задать вращение кольца, а не добавить его.

Замените эту строку:

this.matrix.postRotate((float) (this.startAngle - this.currentAngle), x, y);

К этому:

this.matrix.setRotation((float) (this.currentAngle), x, y);

Нет необходимости постоянно добавлять угол, просто установите его таким, какой он есть на данный момент.

Примечание:

Также обратите внимание на преобразование типа угла. Если я не ошибаюсь, Matrix использует градусы для расчета поворота. Я не уверен, как вы конвертируете x/y касания в угол, но если вы используете Math.atan2, то вы должны помнить, что atan2 использует радианы, поэтому вам нужно обязательно преобразовать тип угла в градусы перед передачей его в матрицу.

person Gil Moshayof    schedule 23.09.2014