我一直在使用一些很好的教程来绘制我的android上的图形。我还想在这里添加一个很酷的手势演示:
http://developer.android.com/resources/articles/gestures.html
这需要以下几行代码:
GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures);
gestures.addOnGesturePerformedListener(this);
这很好,花花公子但我在我的演示中意识到我正在尝试使用“在Android中使用图形播放”中的代码进行构建。演示有意义,一切都有意义,但我发现使用:
setContentView(new Panel(this));
按照“使用图形”教程的要求,然后findViewById似乎不再有效并返回null。起初我正要发布一个关于为什么会发生这种情况的愚蠢问题,使用setContentView进行快速测试让我意识到findViewById返回null的原因,我只是不知道如何解决这个问题。什么是我在这里失踪的钥匙?我意识到新的面板是一些参考,但我不知道如何在这里建立连接。
在: R.id.gestures 在main.xml中定义为:(就像教程一样)
<android.gesture.GestureOverlayView
android:id="@+id/gestures"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1.0" />
所以我确认了
setContentView(new Panel(this))
造成了这个问题。所以我知道问题是我必须弄清楚如何以某种方式将android.gesture.GestureOverlayView添加到面板类中,我只是不确定如何去做。
在与之斗争之后,我通常知道我现在需要做什么怎么做。我想我需要相当于在main.xml中创建一个面板,或者想出如何在main.xml中为代码中的手势构建什么。我很接近,因为我这样做了: GestureOverlayView手势=新的GestureOverlayView(this);
现在让我得到一个非空的手势,不幸的是因为我并没有告诉它在任何我认为它没有真正出现的地方填充Parent,所以我正在努力弄清楚布局pa rams。我甚至走在正确的轨道上吗?
答案 0 :(得分:0)
我自己一直在研究一些示例代码,并且还没有实际编写任何有意义的代码,但也许它很简单,系统无法找到视图,因为你设置了另一个代码? / p>
大多数样本在setContentView中都有对资源的引用(例如setContentView(R.id.gestures)
),不是吗?因此,以后无法找到该观点并不令人惊讶。 ......除非我在这一点上完全不知道......
答案 1 :(得分:0)
为了使findViewById
能够工作,它需要知道上下文正在使用哪个布局文件。这就是setContentView
的用途。由于您在main.xml中定义了布局,因此您需要调用
setContentView(R.layout.main);
(而不是对setContentView的任何其他调用)告诉活动这是它应该使用的布局。完成后,findViewById
将知道在哪里查找ID为“手势”的视图。