【发布时间】:2014-12-25 17:44:00
【问题描述】:
请帮助我。 我无法实现 onTouchListener。 我已经在 Touch 类的主要活动中声明了视图。但我有一个 NullPointerException 结果。
我的主要活动代码:
public class Main extends Activity{
LinearLayout main_lL, c_lL, d_lL, e_lL, f_lL, g_lL, a_lL, b_lL, c1_lL;
ImageView c_iV, d_iV, e_iV, f_iV, g_iV, a_iV, b_iV, c1_iV;
int upPI = 0;
int downPI = 0;
boolean inTouch = false;
Handler h;
public Notes notes;
final int STATUS_NOT_TOUCHED = 0;
... ... ... ... ...
... ... ... ... ...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
main_lL = (LinearLayout) findViewById(R.id.mainLinearLayout);
XyloTouch xyloTouch = new XyloTouch();
main_lL.setOnTouchListener(xyloTouch);
c_lL = (LinearLayout) findViewById(R.id.c_lL);
d_lL = (LinearLayout) findViewById(R.id.d_lL);
e_lL = (LinearLayout) findViewById(R.id.e_lL);
f_lL = (LinearLayout) findViewById(R.id.f_lL);
g_lL = (LinearLayout) findViewById(R.id.g_lL);
a_lL = (LinearLayout) findViewById(R.id.a_lL);
b_lL = (LinearLayout) findViewById(R.id.b_lL);
c1_lL = (LinearLayout) findViewById(R.id.c1_lL);
c_iV = (ImageView) findViewById(R.id.c_iV);
d_iV = (ImageView) findViewById(R.id.d_iV);
e_iV = (ImageView) findViewById(R.id.e_iV);
f_iV = (ImageView) findViewById(R.id.f_iV);
g_iV = (ImageView) findViewById(R.id.g_iV);
a_iV = (ImageView) findViewById(R.id.a_iV);
b_iV = (ImageView) findViewById(R.id.b_iV);
c1_iV = (ImageView) findViewById(R.id.c1_iV);
notes = new Notes(this);
h = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case STATUS_NOT_TOUCHED:
//Do my stuff
break;
case STATUS_C_TOUCHED:
//Do my stuff
break;
case STATUS_C_NOT_TOUCHED:
//Do my stuff
break;
// other cases
}
}
};
}
}
我的 Touch 类:
公共类 XyloTouch 扩展 Main 实现 OnTouchListener {
public XyloTouch(){
super();
}
@Override
public boolean onTouch(View view, final MotionEvent event) {
final int actionMask = event.getActionMasked();
final int pointerCount = event.getPointerCount();
final int pointerIndex = event.getActionIndex();
final int pointerId = event.getPointerId(pointerIndex);
switch (actionMask & event.getAction())
{
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
for (int i = 0; i < pointerCount; i++) {
if (event.getX(pointerIndex) > c_lL.getX() + c_lL.getWidth() / 8 && event.getX(pointerIndex) < c_lL.getX() + c_lL.getWidth() - c_lL.getWidth() / 8
&& event.getY(pointerIndex) > c_iV.getY() + c_iV.getHeight() / 7 && event.getY(pointerIndex) < c_iV.getY() + c_iV.getHeight() - c_iV.getHeight() / 7) {
c_touched = true;
c_touched2 = true;
}
... ... ... ...
break;
case MotionEvent.ACTION_UP:
... ... ... ...
break;
case MotionEvent.ACTION_POINTER_UP:
... ... ... ...
break;
case MotionEvent.ACTION_MOVE:
... ... ... ...
break;
}
if (c_touched) {
h.sendEmptyMessage(STATUS_C_TOUCHED);
} else {
h.sendEmptyMessage(STATUS_C_NOT_TOUCHED);
}
... ... ... ...
return true;
}
}
日志
"at dalvik.system.NativeStart.main(Native Method)
12-26 02:14:53.861 715-715/com....... E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com........XyloTouch.onTouch(XyloTouch.java:45)"
in my XyloTouch.onTouch in case event.ACTION_DOWN at the line - "if (event.getX(pointerIndex) > c_lL.getX() + c_lL.getWidth() / 8 && event.getX(pointerIndex) < c_lL.getX() + c_lL.getWidth() - c_lL.getWidth()....."
请帮帮我,我真的很累尝试修复它。
【问题讨论】:
-
如果你在子视图而不是父视图(LinearLayouts)上实现触摸监听器会更好......
-
感谢您的回答。我这样做是因为我想使用视图位置。我在 png 中的图像有一个 alpha 通道,它会在图像和视图高度和重量方面产生视觉差异。
标签: java android nullpointerexception ontouchlistener touch-event