如何从另一个 class 调用 invalidate() 方法?
How to call invalidate() method from another class?
我正在尝试在我的 Android 应用程序的自定义视图上实现缩放功能。我使用以下 class 来做到这一点。
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();
但是这个也returns一个错误。无法实例化我的自定义视图。那么这里如何调用invalidate()方法呢?
invalidate()
是视图 class 的方法。因此,如果您想在视图未扩展的 class 中调用它,则必须传递要使其无效的视图。按照以下说明进行操作。
首先在 ScaleListener
class 中使用 View class as public DrawingView view;
创建局部变量。然后在您的自定义视图中将您的 class 实例化为 scale = new ScaleListener();
。然后您可以将视图作为 scale.view = this;
传递。现在您可以在 class 中调用 invalidate()
方法作为 view.invalidate();
我正在尝试在我的 Android 应用程序的自定义视图上实现缩放功能。我使用以下 class 来做到这一点。
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();
但是这个也returns一个错误。无法实例化我的自定义视图。那么这里如何调用invalidate()方法呢?
invalidate()
是视图 class 的方法。因此,如果您想在视图未扩展的 class 中调用它,则必须传递要使其无效的视图。按照以下说明进行操作。
首先在 ScaleListener
class 中使用 View class as public DrawingView view;
创建局部变量。然后在您的自定义视图中将您的 class 实例化为 scale = new ScaleListener();
。然后您可以将视图作为 scale.view = this;
传递。现在您可以在 class 中调用 invalidate()
方法作为 view.invalidate();