Android设备在屏幕上绘图时不执行主线程(onTouchEvent)
每个人? 我正在测试一些触摸板,它必须与我们公司的安卓设备一起工作。我实现了一些绘图示例并在android设备上运行。我实现了许多绘图示例。 当我在android手机或其他设备上运行已实现的APK时,它们工作得非常好。 但当在我们的android设备上运行时,它会在笔离开键盘后在屏幕上画图。 这是图纸样本之一的一部分Android设备在屏幕上绘图时不执行主线程(onTouchEvent),android,performance,touch-event,Android,Performance,Touch Event,每个人? 我正在测试一些触摸板,它必须与我们公司的安卓设备一起工作。我实现了一些绘图示例并在android设备上运行。我实现了许多绘图示例。 当我在android手机或其他设备上运行已实现的APK时,它们工作得非常好。 但当在我们的android设备上运行时,它会在笔离开键盘后在屏幕上画图。 这是图纸样本之一的一部分 public SignatureView(Context context) { super(context); paint.setAntiAlias(true);
public SignatureView(Context context) {
super(context);
paint.setAntiAlias(true);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeWidth(5.0f);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawPath(path, paint);
debug("OnDraw");
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
debug("ACTION_DOWN");
path.moveTo(eventX, eventY);
lastTouchX = eventX;
lastTouchY = eventY;
return true;
case MotionEvent.ACTION_MOVE:
debug("ACTION_MOVE");
resetDirtyRect(eventX, eventY);
path.lineTo(eventX, eventY);
break;
case MotionEvent.ACTION_UP:
debug("ACTION_UP");
break;
default:
return false;
}
invalidate(
(int) (dirtyRect.left-halfStrokeWidth),
(int) (dirtyRect.top-halfStrokeWidth),
(int) (dirtyRect.right+halfStrokeWidth),
(int) (dirtyRect.bottom+halfStrokeWidth));
lastTouchX = eventX;
lastTouchY = eventY;
return true;
你可以在日志上看到,它首先在屏幕上画图,但之后它什么也没做,在笔离开后,一组事件同时发生,然后它在屏幕上画图。我并没有制作视频,但若你们看,这就像我画画时什么也并没有发生一样,但在画笔离开后,事件同时发生了
你认为问题出在哪里?司机或标志牌或设备。我不知道设备的真正规格,但我听说设备规格像三星galaxy S1 onTouchEvent未在主线程上执行。那就给我打电话吧
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
// your drawing code here
resetDirtyRect(eventX, eventY);
path.lineTo(eventX, eventY);
}
});
从听者的内部