java - Android 中类之间的全局变量重置为 0

标签 java android

有一些与此相关的问题,但我找不到任何对我有帮助的问题。我的代码如下。基本上touchX是在OnTouch中设置的。一旦我们到达 OnDraw(),它就会重置为 0。

public class NonmultiplierSixView extends View implements View.OnTouchListener{
int touchX;
int touchY;
public NonmultiplierSixView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setOnTouchListener(this);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    int touchX = (int)event.getX();
    int touchY = (int)event.getY();
    Log.i("STATE", Integer.toString(touchX));
    return true;
}



@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Log.i("STATE", Integer.toString(touchX));
}


}

如何阻止它将 touchX 和 touchY 的值重置为 0?

最佳答案

您已创建 touchXtouchY 的 2 个副本。

这两个,

public class NonmultiplierSixView extends View implements View.OnTouchListener {
int touchX;
int touchY;

是实例变量(即它们属于NonmultiplierSixView类的对象)

而函数onTouch中定义的是本地副本。

public boolean onTouch(View v, MotionEvent event) {
    int touchX = (int)event.getX();
    int touchY = (int)event.getY();

在函数onDraw中,您实际上访问的是实例变量touchX,而不是局部变量。由于实例 int 变量的默认值为 0,因此您将在 onDraw 函数中获取 0

================================================

解决方案:

试试这个

public boolean onTouch(View v, MotionEvent event) {
    this.touchX = (int)event.getX();
    this.touchY = (int)event.getY();
    Log.i("STATE", Integer.toString(this.touchX));
    return true;
}



@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Log.i("STATE", Integer.toString(this.touchX));
}

关于java - Android 中类之间的全局变量重置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44712478/

相关文章:

java - 如何使用 ResponseBodyAdvice 响应不带双引号的字符串正文数据?

java - 如何在 Firestore 数据库中运行多个事务?我面临的问题是

java - Websphere App 8 : DataContentHandler requires String object, 被赋予类型为 com.sun.jersey.api.view.Viewable 类的对象

java - 为没有无参数构造函数的类创建动态代理

android - 在videoview中播放youtube视频

java - 动态更改应用程序上下文的区域设置

android - 在 Android/iOS 上获取默认设备方向(横向或纵向)

java - 在java中写入类路径内的文件

android - 我可以将我的 Play 商店 apk 文件上传到其他 Android 商店吗?

android - 如何构建 Cordova 8.x cordova.jar 以包含在现有 Android 应用程序中?