我結束了以下解決方案,我創建了4個點,其中一個用於textView的每個角,然後以與textView相同的角度旋轉。有了這些觀點,我就可以創建一個我用來創建區域的路徑。
private Region createRotatedRegion(TextView textView){
Matrix matrix = new Matrix();
matrix.setRotate(textView.getRotation(), textView.getX() + textView.getMeasuredWidth()/2, textView.getY() + textView.getMeasuredHeight()/2);
Path path = new Path();
Point LT = rotatePoint(matrix, textView.getX(), textView.getY());
Point RT = rotatePoint(matrix, textView.getX() + textView.getMeasuredWidth(), textView.getY());
Point RB = rotatePoint(matrix, textView.getX() + textView.getMeasuredWidth(), textView.getY() + textView.getMeasuredHeight());
Point LB = rotatePoint(matrix, textView.getX(), textView.getY() + textView.getMeasuredHeight());
path.moveTo(LT.x, LT.y);
path.lineTo(RT.x, RT.y);
path.lineTo(RB.x, RB.y);
path.lineTo(LB.x, LB.y);
Region region = new Region();
region.setPath(path, new Region(0, 0, textViewParent.getWidth(), textViewParent.getHeight()));
return region;
}
private Point rotatePoint(Matrix matrix, float x, float y){
float[] pts = new float[2];
pts[0] = x;
pts[1] = y;
matrix.mapPoints(pts);
return new Point((int)pts[0], (int)pts[1]);
}
當我有現在具有相同的位置和旋轉兩個textViews然後我就可以使用下面的代碼來檢查碰撞兩個區域:
if (!region1.quickReject(region2) && region1.op(region2, Region.Op.INTERSECT)) {
return true; //There is a collision
}
可能不是最好的解決方案,但它得到工作完成。
你如何旋轉這些視圖?你能告訴我們代碼嗎? – dkarmazi
我不知道你是如何旋轉'視圖'的,但如果你知道它們的座標之前,你知道角度,你可以使用一些三角函數來計算邊界框。這裏是一個優秀的帖子:http://stackoverflow.com/questions/5789239/calculate-largest-rectangle-in-a-rotated-rectangle – jammaster
要旋轉textview我使用setRotation函數。 Se編輯 – FewWords