2016-07-30 95 views
1

這是我的代碼,我可是從左上角成功縮放,但我想從圖像的中心放大,並希望增加image.I的大小通過它試圖驗證碼,直到now.Help我請如何從中心點放大圖像?

@Override 
    public boolean onTouchEvent(MotionEvent event) { 
    //Log.e(Codistan_Tag, "Touch Event: " +MotionEvent.actionToString(event.getAction())); 
    if(isImageReady) { 

     if(isSelectionDragEnabled) 
      mPanListener.onTouchEvent(event); 

     if (isZoomEnabled) { 
      if(event.getAction() == MotionEvent.ACTION_DOWN){ 
       anchor_scale = mScaleFactor; 
      } 
      mScaleDetector.onTouchEvent(event); 
      mPanListener.onTouchEvent(event); 
     } else { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_POINTER_3_DOWN: 
        break; 
       case MotionEvent.ACTION_POINTER_2_DOWN: 
        break; 
       case MotionEvent.ACTION_POINTER_1_UP: 

        break; 
       case MotionEvent.ACTION_DOWN: 

        if (isSelectionToolEnabled) 
         isDrawFinished = false; 

        orig_x = event.getX(); 
        orig_y = event.getY(); 

        //Log.e(Codistan_Tag, "-------ORIGIN-------s: " + String.valueOf(orig_x) + " " + String.valueOf(orig_y)); 

        orig_x = (orig_x - dest.left); 
        orig_y = (orig_y - dest.top); 

        if(java.lang.Math.round(mScaleFactor) > 2) { 
         orig_x += (scale_cur_x * (riz_scale)); 
         orig_y += (scale_cur_y * (riz_scale)); 
        } else { 
         orig_x += (scale_cur_x); 
         orig_y += (scale_cur_y); 
        } 

        orig_x /= java.lang.Math.round(mScaleFactor); 
        orig_y /= java.lang.Math.round(mScaleFactor); 

        orig_x *= scale; 
        orig_y *= scale; 

        //mSelectionTaskManager.setOrigin((int) orig_x, (int) orig_y); 
        if(isSelectionToolEnabled) 
         MovementStack.add(new Pair((int)orig_x, (int)orig_y)); 

        Log.e(Codistan_Tag, "Codistan Origins: " + String.valueOf(orig_x) + ", " + String.valueOf(orig_y)); 

        break; 
       case MotionEvent.ACTION_MOVE: 
        max_dist = dist * scale; 
        if (event.getAction() != 1) { 
         move_x = event.getX(); 
         move_y = event.getY(); 

         //Log.e(Codistan_Tag, "Move: " + String.valueOf(move_x) + ", " + String.valueOf(move_y)); 

         move_x = (move_x - dest.left); 
         move_y = (move_y - dest.top); 



         if(java.lang.Math.round(mScaleFactor) > 2) { 
          move_x += (scale_cur_x * riz_scale); 
          move_y += (scale_cur_y * riz_scale); 
         } else { 
          move_x += (scale_cur_x); 
          move_y += (scale_cur_y); 
         } 

         move_x /= java.lang.Math.round(mScaleFactor); 
         move_y /= java.lang.Math.round(mScaleFactor); 

         move_x *= scale; 
         move_y *= scale; 

         //Log.e(Codistan_Tag, "Codistan Move: " + String.valueOf(move_x) + ", " + String.valueOf(move_y)); 

         if (move_x >= 0 && move_y >= 0) { 
          if (!isSelectionToolEnabled && isDistortionEnabled) { 
           warpPhotoFromC(image, height, width, max_dist/mScaleFactor, orig_x, orig_y, move_x, move_y); 
           first++; 
           distortedBmp.setPixels(image, 0, width, 0, 0, width, height); 
           fg = false; 
          } else { 
           //Cut Tool Enabled 
           distortedBmp.setPixels(image, 0, width, 0, 0, width, height); 
           MovementStack.add(new Pair((int) move_x, (int) move_y)); 
          } 
         } 
        } 
        orig_x = move_x; 
        orig_y = move_y; 
        break; 
       case MotionEvent.ACTION_UP: 
        if (isSelectionToolEnabled) 
         isDrawFinished = true; 
        break; 
      } 
     } 
     v.invalidate(); 
    } 
    return true; 
} 
+0

[這](http://pastebin.com/JkMLHq5e)是怎麼了,你只需要修改'postScale'的最後2個參數 – pskink

+0

修改如何請解釋 –

+0

不,這是你的功課 – pskink

回答

1

我得到了我的解決方案除以2

orig_x = event.getX()/2; 
orig_y = event.getY()/2; 
0

如果您可以編碼以某種方式縮放的圖像的「fromXDelta」和「fromYDelta」值,請嘗試一下。價值是每個50%。

+0

基本上是在運行時獲取屏幕截圖,然後應用縮放在它上面我粘貼了代碼m用於放大不知道我應該在哪裏改變圖像的中心點 –