2014-04-11 50 views
1

我创建了一个应用程序。在那个应用程序中,我使用canav实现了手指绘图。它完美地工作。但是当我放大视图时,手指绘图被清除以避免这种情况。如果您有任何想法,请分享。在此先感谢 这是我的代码: 这是指绘制缩放视图时,画布被清除

PageView.Java: 

@Override 
     protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
      super.onSizeChanged(w, h, oldw, oldh); 
      mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
      mCanvas = new Canvas(mBitmap); 
     } 


     private float mX, mY; 
     private static final float TOUCH_TOLERANCE = 4; 

     private void touch_start(float x, float y) { 
      mPath.reset(); 
      mPath.moveTo(x, y); 
      mX = x; 
      mY = y; 
     } 
     private void touch_move(float x, float y) { 
      float dx = Math.abs(x - mX); 
      float dy = Math.abs(y - mY); 
      if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { 
       mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); 
       mX = x; 
       mY = y; 
      } 
     } 
     private void touch_up() { 
      mPath.lineTo(mX, mY); 
      // commit the path to our offscreen 
      mCanvas.drawPath(mPath, MuPDFActivity.mPaint); 
      // kill this so we don't double draw 
      mPath.reset(); 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) 
     { 
      if(MuPDFActivity.onDrawModeFlag == 1) 
      { 
       float x = event.getX(); 
       float y = event.getY(); 
       switch (event.getAction()) 
       { 
        case MotionEvent.ACTION_DOWN: 
         touch_start(x, y); 
         invalidate(); 
         break; 
        case MotionEvent.ACTION_MOVE: 
         touch_move(x, y); 
         invalidate(); 
         break; 
        case MotionEvent.ACTION_UP: 
         touch_up(); 

       } 
       return true; 
      } 
      else 
      { 
       return false; 
      } 

     } 

@Override 
        protected void onDraw(Canvas canvas) 
        { 
         super.onDraw(canvas); 
         canvas.save(); 
         //canvas.translate(mX, mY); 
         //canvas.scale(ReaderView.mScale, ReaderView.mScale); 
         System.out.println("On Canvas Calling"); 
         canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 
         canvas.drawPath(mPath,MuPDFActivity.mPaint); 
} 

MuPdfActivity: 
      In activity oncreate function, I call the paint feautures 
       mPaint.setAntiAlias(true); 
     mPaint.setDither(true); 
     mPaint.setColor(0xFFFF0000); 
     mPaint.setStyle(Paint.Style.STROKE); 
     mPaint.setStrokeJoin(Paint.Join.ROUND); 
     mPaint.setStrokeCap(Paint.Cap.ROUND); 
     mPaint.setStrokeWidth(12); 
     mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, 
              0.4f, 6, 3.5f); 
     mBlur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL); 

回答

1

我发现我在touch_up功能mPath.reset删除一行答案()。然后我删除touch_start函数中的mPath.reset()。