在屏幕上绘图时,Android设备不会执行主线程(onTouchEvent)

时间:2014-11-14 02:25:35

标签: android performance ontouchevent

大家? 我正在测试一些触摸板,它必须与我们公司的Android设备一起使用。我实现了一些绘图示例并在Android设备上运行。我实施了很多绘图样本。 当我在Android手机或其他设备上运行实现的apks时,那些工作正常。 但是当我们在Android设备上运行时,它会在笔离开打击垫后在屏幕上绘制。 这是绘图样本

的一部分
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。

1 个答案:

答案 0 :(得分:0)

onTouchEvent未在mainThread上执行。所以请致电

   activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // your drawing code here 
            resetDirtyRect(eventX, eventY);
            path.lineTo(eventX, eventY);
        }
    });

来自听众。