如何从另一个类调用 invalidate() 方法?

Posted

技术标签:

【中文标题】如何从另一个类调用 invalidate() 方法?【英文标题】:How to call invalidate() method from another class? 【发布时间】:2017-07-20 17:38:54 【问题描述】:

我正在尝试在我的 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;
    

我想在onScale 中调用上述invalidate() 方法,但这是错误的,因为这超出了我的自定义视图。但是,我尝试通过在此处实例化自定义视图来做到这一点,如下所示。

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

但是这个也返回一个错误。无法实例化我的自定义视图。那么这里如何调用 invalidate() 方法呢?

【问题讨论】:

你可以在你的视图类中创建一个调用invalidate()函数的函数。这个函数可以是从类外部失效 @AyushBansal 但问题是无法在此处实例化自定义视图。 传递你想要失效的视图。 如果您想捕获自定义视图的触摸事件,最好在自定义视图本身内设置手势监听器。这样当你想重用这个类时,你可以直接复制这个类。 【参考方案1】:

invalidate() 是 View 类的方法。因此,如果您想在未由 View 扩展的类中调用它,则必须传递您想要使视图无效的视图。按照以下说明进行操作。

首先在 ScaleListener 类中使用 View 类作为 public DrawingView view; 创建局部变量。然后在您的自定义视图中将您的类实例化为scale = new ScaleListener();。然后您可以将视图传递为scale.view = this;。现在你可以在你的类中调用invalidate() 方法为view.invalidate();

【讨论】:

以上是关于如何从另一个类调用 invalidate() 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个类调用方法函数?

如何从另一个类调用非静态抽象方法

如何从另一个类调用执行 segue 方法?

如何从另一个 appDomain 调用类的方法

如何从另一个类调用viewmodel方法

如何从另一个类中调用 onItemClick 方法?