gpt4 book ai didi

Android SurfaceView 不响应触摸事件

转载 作者:太空狗 更新时间:2023-10-29 16:01:51 24 4
gpt4 key购买 nike

我正在尝试获得一个简单的表面 View 来响应触摸事件。下面的应用程序启动但不响应触摸事件。我有一个 Log.i 语句来确认(通过打印到控制台)触摸事件是否有效。谁能告诉我我做错了什么?

这是我的主要 Activity

public class MainActivity extends Activity {

public static int screenWidth, screenHeight;
public static boolean running=true;
public static MainSurface mySurface;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//this gets the size of the screen
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
screenWidth = displaymetrics.widthPixels;
screenHeight = displaymetrics.heightPixels;
Log.i("MainActivity", Integer.toString(screenWidth) + " " + Integer.toString(screenHeight));

mySurface = new MainSurface(this);

setContentView(mySurface);
}

}

这是表面 View 类

public class MainSurface extends SurfaceView implements OnTouchListener {

public MainSurface(Context context) {
super(context);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
int point = event.getPointerCount();
Log.i("MainSurface", Integer.toString(x)); //nothing prints to the console here
return true;
}

}

最佳答案

  1. 删除实现 OnTouchListener
  2. onTouch(View v, MotionEvent event) 更改为 onTouchEvent(MotionEvent event)

它不工作的原因是 SurfaceView 不知道它应该是它自己的 OnTouchListener 而不是你告诉它。或者,您可以通过将此代码添加到您的 onCreate() 来使其工作:

mySurface = new MainSurface(this);
mySurface.setOnTouchListener(mySurface);

但是由于 SurfaceView 已经有一个 OnTouchEvent 函数,所以直接使用它会更简单。

另外,不要将 SurfaceView 声明为静态的。

关于Android SurfaceView 不响应触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28979683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com