我正在开发一个应用程序,允许用户在屏幕上拖动一个点并设置距离值。我想要的是半屏拖动功能,另一半用小工具(按钮和textViews)。为此,我创建了一个扩展SurfaceView的类,使用了位图“dot”和函数onTouchEvent,并在我的xml文件中引用了如下跟我的视图:
<test1.DragView
android:id="@+id/view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
这给了我想要的东西。但现在我想动态更新点的位置。为此,我在onTouchEvent函数中为textView添加了setText()函数:
@Override
public boolean onTouchEvent(MotionEvent event) {
x=(int)event.getX();
y=(int)event.getY();
bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.dot);
if(x<0)
x=0;
if(x > width+(bitmap.getWidth()/2))
x=width+(bitmap.getWidth()/2);
if(y <0)
y=0;
if(y > height/2)
y=height/2;
tv=(TextView) findViewById(R.id.textView); //I declared tv in the beginning of my class
tv.setText(x);
updateBall(); //it's a function that resets the position of the dot
return true;
}
它给了我像
这样的错误AndroidRuntime(845): FATAL EXCEPTION: main
AndroidRuntime(845): java.lang.NullPointerException
AndroidRuntime(845):
at test1.DragView.onTouchEvent(DragView.java:87)
AndroidRuntime(845):
at android.view.View.dispatchTouchEvent(View.java:5462)
AndroidRuntime(845): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1953)
我无法在DragView类中使用textView。这是正常的吗?如果需要,我可以提供更多的解释。
编辑: 使用ReubenScratton的解决方案后,我现在可以访问我的textView但是我收到以下错误:
AndroidRuntime(672): FATAL EXCEPTION: main
AndroidRuntime(672): android.content.res.Resources$NotFoundException: String resource ID #0x109
AndroidRuntime(672): at android.content.res.Resources.getText(Resources.java:247)
AndroidRuntime(672): at android.widget.TextView.setText(TextView.java:3427)
AndroidRuntime(672): at test1.DragView.onDraw(DragView.java:73)
答案 0 :(得分:1)
我正在回答我自己的问题,但请注意,我只是将其他人提供的解决方案( ReubenScratton 和 lazeR )放在一起,这样如果其他人拥有同样的问题,他会找到整个解决方案。
所以解决方案:首先不是直接访问我的textView
我必须使用
tv=(TextView) ((Activity)getContext()).findViewById(R.id.textView)
因为如果你使用
tv=(TextView)findViewById();
您正在使用只会搜索子视图的View.findViewById()
。
您想使用Activity.findViewById()
ReubenScratton
对于我的第二个问题,因为我直接使用了setText()
函数的int它没有工作但是由于 lazeR 的评论,我注意到它并找到了解决方案。感谢所有帮助我的人:)。