2011-12-24 106 views
1

我想縮放ACTION_MOVE的觸摸事件的視圖。 when i drag orange square image according to that red ball should be resized. red bal resized from its center point to center of orange square image ooutput of image like this我想在ACTION_MOVE上縮放位圖android

所有的位圖都是方形格式。 (point1 = top + left,point2 = top + right,point3 = bottom + left,point4 = bottom + right) 我得到了全部四點。 當我拖動位圖頂部的黃色抓手時,紅色的球根據那個調整大小(抓手可以在任何方向移動)。

我的問題: - >我應該如何計算夾點中心點和位圖(左+頂)point1的距離並根據位圖進行縮放。

意思是說,如果我從頂部+左邊角拖動位圖,那麼它只從點1,點2,點4(底部+右邊角落重新放置在其位置)縮放/調整大小。

- >我使用畫布繪製位圖,它是正確的處理位圖縮放/旋轉?

回答

2

您可以獲取事件ACTION_DOWN上的x,y座標以及ACTION_UP上的x',y'座標。有了這兩點,你可以制定你的措施(例如歐幾里德距離)。

gripper.setOnTouchListener(new OnTouchListener(){ 
    public boolean onTouch(View v, MotionEvent event) { 

     if(event.getAction() == android.view.MotionEvent.ACTION_DOWN){ 
      x1 = event.getX(); 
      y1 = event.getY(); 
     } 
     else if(event.getAction() == android.view.MotionEvent.ACTION_UP){ 
      x2 = event.getX(); 
      y2 = event.getY(); 
     }    
     return false; 
    }   
}); 

您也可以在左邊,位圖的頂部位置getLeft()getTop()方法(但要注意的是,這些方法返回相對於視圖的父佈局的位置)。

createBitmap方法中有一個Matrix參數,它允許您調整位圖的大小,因此可以使用所需的分辨率存儲它。請參閱here(順便提一下,這是一本很好的教程)。您可能已經知道如何做到這一點,但無論如何我都沒有看到分享它的問題= P。

希望它能幫助

+0

感謝replying.createBitmap java.lang.IllegalArgumentException異常:X +寬度必須<= bitmap.width()例外,我已經使用createScaledBitmap功能及它工作正常,但問題是當我比例(重新調整大小)的圓形位圖,它會縮放爲圓弧形的位圖。任何溶膠。 ? –

+0

這是I HV使用什麼爲u說:位圖scaledBitmap = Bitmap.createBitmap(B,的getX(),的getY(), // \t \t \t \t \t寬度,高度,矩陣,TRUE); getX()和getY()是我當前在畫布上的位圖位置。抱歉的評論格式。 –

+0

看來你的代碼有錯誤。看看我再次發佈的鏈接。你應該做「位圖resizedBitmap = Bitmap.createBitmap(bitmapOrg,0,0,bitmapOrg.width(),bitmapOrg.height,matrix,true);」總是...「矩陣」參數是保存實際所需比例的參數,例如「matrix.postScale((((float)newWidth)/ width),(((float)newHeight)/ height))」。註釋格式對於解釋=/...沒有多大幫助,所以請花時間在我發佈的鏈接上,並僅使用Matrix的參數,以便調整大小。 – Alesqui