我正在开发一个应用程序,我将触摸侦听器应用到我的布局视图中。我在屏幕上移动布局,但布局在10到15秒后响应不好。这是我的代码:
base = (LinearLayout) findViewById(R.id.load);
base.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, final MotionEvent event) {
int motion = event.getAction();
int numberOfPointers = event.getPointerCount();
if (numberOfPointers < 3) {
switch (motion & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
drag = true;
break;
case MotionEvent.ACTION_POINTER_DOWN: {
drag = false;
if (drawWaveForm != null) {
zoom = true;
}
// initial x1 and x2
BitmapDetector.prevX1 = Math.min(event.getX(0), event.getX(1));
BitmapDetector.prevX2 = Math.max(event.getX(0), event.getX(1));
BitmapDetector.prevY1 = event.getY(0);
BitmapDetector.prevY2 = event.getY(1);
}
break;
case MotionEvent.ACTION_MOVE:
if (drag && event.getActionIndex() == 0) {
// Log.d("detecting","inside the action move");
if (touching == false) {
touching = detector.isWaveformAnchor(event.getX(0), event.getY(0));
} else if (touching == true) {
float diff = event.getY(0) - loadWaveFormManager.getCh1_pos();
if ((loadWaveFormManager.getCh1_pos() + diff) < (StaticValues.screenHeight - 50)) {
int tempCh1_pos = (int) (loadWaveFormManager.getCh1_pos() + diff);
loadWaveFormManager.setCh1_pos(tempCh1_pos);
}
drawWaveForm.update(loadWaveFormManager);
}
}
break;
case MotionEvent.ACTION_UP:
// Log.d("detecting","inside the action up");
drag = false;
touching = false;
zoom = false;
break;
case MotionEvent.ACTION_POINTER_UP:
// here different function
return;
}
});
有没有人对此有任何想法?请帮我解决这个问题。
答案 0 :(得分:1)
从您的代码中不清楚您的问题是什么以及何时发生。我没有看到任何TimerTask
或AsyncTask
引用。
我想,你试图在UI线程中做一些昂贵的操作,这会冻结你的应用程序。可能的长期候选人是drawWaveForm.update(loadWaveFormManager)
如果是这样,您应该异步执行计算,然后才更新UI。
顺便说一句,您的代码根本无法编译:
public boolean onTouch(View v, final MotionEvent event)
应返回 true 或 false ,而不是在此方法结束时执行return;
。这导致了一个假设,即您在问题中提供了不相关的代码,但仍希望收到相关答案。
提供相关代码片段以供进一步分析。
答案 1 :(得分:0)
目前,您正在启动线程触摸事件使用处理程序 线程