Как вызвать метод invalidate() из другого класса?

Я пытаюсь реализовать функцию масштабирования пинча в моем пользовательском представлении в приложении для Android. Я использовал следующий класс, чтобы сделать это.

public class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {

    public ScaleGestureDetector mScaleDetector;
    public float mScaleFactor = 1.f;

    public ScaleListener(){

    }

    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        mScaleFactor *= detector.getScaleFactor();

        // Don't let the object get too small or too large.
        mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));

        invalidate(); //Error

        return true;
    }
}

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

View myview = new DrawingView();
myview.invalidate();

Но этот также возвращает ошибку. Не могу создать экземпляр моего пользовательского представления. Так как же вызвать метод invalidate() здесь?

1 ответ

Решение

invalidate() это метод класса View. Поэтому, если вы хотите вызвать его в своем классе, который не был расширен с помощью View, вы должны передать свое представление, которое хотите аннулировать. Следуйте следующей инструкции.

Сначала создайте локальную переменную, используя класс View как public DrawingView view; в вашем ScaleListener учебный класс. Затем создайте экземпляр вашего класса в вашем пользовательском представлении как scale = new ScaleListener();, Тогда вы можете передать вид как scale.view = this;, Теперь вы можете позвонить invalidate() метод в вашем классе как view.invalidate();

Другие вопросы по тегам