1

我试图在我在 Android 中创建的视图上设置一个 OnTouchListener。我必须上课,MainActivity,它扩展了 Activity 和我的 drawView,它扩展了 View。

我的主要活动实现了 OnTouchListener,并且我已经实例化了 drawView。它工作正常,但drawView.setOnTouchListener(MainActivity.this)没有效果。如果我OnTouchListener在 my 中实现drawView并设置DrawView.this.setOnTouchListener(this),它可以正常工作,但它必须在我的 MainActivity 中。

我的 MainActivity 中的一些代码:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
Display display = getWindowManager().getDefaultDisplay();
drawView = new DrawView(this);
setContentView(R.layout.canvas);
drawView.setOnTouchListener(this);

我的 canvas.xml 中的一些代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<package.DrawView android:id="@+id/drawView" android:layout_width="fill_parent"       android:layout_height="fill_parent" /> 
</LinearLayout>

有人有想法吗?

最良好的祝愿费边

4

2 回答 2

0

我正在开发的游戏也遇到了同样的问题。

真的不知道为什么这对我有用。但我将 touchListener 分配给同一个视图。我假设您在 DrawView 类(并扩展 View)上实现 OnTouchlistener,所以:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
Display display = getWindowManager().getDefaultDisplay();
drawView = new DrawView(this);
drawView.setOnTouchListener(drawView);
setContentView(R.layout.canvas);

所以,在 setContentView 之前,将 setOnTouchListener 分配给 drawView,我不知道为什么,但这实际上对我有用。希望能帮助到你。

于 2013-09-24T13:51:35.087 回答
0

看起来DrawView您正在创建的对象没有被插入到视图层次结构中。可能你想要的是DrawView从布局中找到膨胀的(而不是创建一个新的)并将你的设置OnTouchListener在那里。

例如,将最后 3 行替换为:

setContentView(R.layout.canvas);
DrawView drawView = findViewById(R.id.drawView); // Look up the inflated DrawView
drawView.setOnTouchListener(this);

希望有帮助!

于 2013-07-09T23:29:35.430 回答