1

コードに問題があります。3秒後にAction_UPしたときに(リセット機能で)キャンバスをクリアしたい(ここではタイマーを使用しました)。この期間中に Action_Down または Action_Move イベントが発生した場合、Timer-Task をキャンセルする必要があります。

( Action_down & Action_move は Action_up でタイマーをキャンセルする必要があります) 私を助けてください。

ありがとう

        public boolean onTouch(View view, MotionEvent event) {
            // Check event type

            switch (event.getAction()) {

            // Finger down
            case MotionEvent.ACTION_DOWN:

                    paint.setColor(Color.BLACK);
                    paint.setStrokeWidth(7f);
                    paint.setStrokeJoin(Paint.Join.ROUND);
                    paint.setStrokeCap(Paint.Cap.ROUND);
                    paint.setAntiAlias(true);


                    // Get current position
                    pX = event.getX();
                    pY = event.getY();

                    // Set beginning of path to (posX,posY)

                    path.moveTo(pX, pY);

                    if (start)
                    {
                        mytimer.cancel();
                        start = false;
                    }


                    break;

            // Finger moves
            case MotionEvent.ACTION_MOVE:
                    mX = event.getX();
                    mY = event.getY();

                    // Set position of end of path
                    path.lineTo(mX, mY);


                    // Draw path
                    bitmapCanvas.drawPath(path, paint);

                    // Invalidate canvas (redraw the view)

                    if (start)
                    {
                        mytimer.cancel();
                        start = false;
                    }

                    invalidate();
                    break;

            // Finger up
            case MotionEvent.ACTION_UP:

                    //bitmap = getResizedBitmap(bitmap, 16, 16);
                    //here We have to start our neocogniton :)   

                    mX = event.getX();
                    mY = event.getY();

                    if (mY == pY && mX == pX){                      
                        bitmapCanvas.drawPoint(pX, pY, paint);
                        invalidate();
                    }

                    path.reset();

                    mytimer.schedule(new TimerTask() {                      
                        @Override
                        public void run() {reset();}}, 3000);




                    break;

            }


            return true;
    }

リセット()

    public void reset(){
            bitmapCanvas.drawColor(Color.WHITE);
            start = true;    
    }
4

1 に答える 1

1

この関数はタイマー自体をキャンセルしているため、2番目の timer.cancel でエラーが発生したと思います。入力してみてください:

 myTimer = new Timer(); 

 myTimer.cancel();
于 2013-03-11T18:14:28.030 に答える