[英]Android rotating multiple bitmaps around a point
我正在畫布上圍繞某個點旋轉一組位圖。 我正在使用以下功能進行旋轉:
private void rotateGroupdAtPoint(ArrayList<MyBitmap> group, int degrees) {
// TODO Auto-generated method stub
float minx=100000,miny=100000,maxx=-100000,maxy=-100000;
for(int i = 0; i < group.size(); i++) {
MyBitmap m = group.get(i);
if(minx > m.getX()) {
minx = m.getX();
}
if(miny > m.getY()) {
miny = m.getY();
}
if(maxx < m.getX() + m.getBmp().getWidth()) {
maxx = m.getX() + m.getBmp().getWidth();
}
if(maxy < m.getY() + m.getBmp().getHeight()) {
maxy = m.getY() + m.getBmp().getHeight();
}
}
float x = (minx+maxx)/2;
float y = (miny+maxy)/2;
Log.d("minmax","min:"+minx+","+maxx+" max:"+miny+","+maxy);
for(int i = 0; i < group.size(); i++) {
Log.d("position before","x:" + group.get(i).getX() + ", y:" + group.get(i).getY());
float newx = (float)(((group.get(i).getX() - x) * Math.cos(Math.toRadians(degrees))) + ((group.get(i).getY() - y) * Math.sin(Math.toRadians(degrees)))) + x;
float newy = (float)(((group.get(i).getX() - x) * Math.sin(Math.toRadians(degrees))) - ((group.get(i).getY() - y) * Math.cos(Math.toRadians(degrees)))) + y;
group.get(i).setX(newx);
group.get(i).setY(newy);
group.get(i).setBmp(rotateBitmap(group.get(i).getBmp(), -90));
Log.d("position","x:" + group.get(i).getX() + ", y:" + group.get(i).getY());
}
}
private Bitmap rotateBitmap(Bitmap bmp, int degrees) {
if (degrees != 0 && bmp != null) {
Matrix matrix = new Matrix();
matrix.setRotate(degrees, (float) bmp.getWidth() / 2, (float) bmp.getHeight() / 2);
try {
Bitmap rotatedBmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
if (bmp != rotatedBmp) {
bmp.recycle();
bmp = rotatedBmp;
}
} catch (OutOfMemoryError ex) {
return null;
}
}
return bmp;
}
首先,我找到所有位圖共有的中點,然后圍繞該點旋轉。 目前,我對方向沒有任何問題,我將添加代碼來實現。 但是我的問題是位圖無法圍繞中心點以所需角度正確旋轉。 誰能指導我哪里做錯了?
您根本不會旋轉位圖。 您可以使用setX()
和setY()
屬性將位圖移動到其新位置。 最重要的是,您需要確定它們應該旋轉多少度,並將setRotation()
方法與setPivotX()
和setPivotY()
方法結合使用。
默認情況下, setRotation(float radians)
將以radians
圍繞旋轉視圖的中心點旋轉圖像。 因此,如果調用group.get(i).setRotation(Math.PI/2)
,則位圖將從其位置旋轉90度。
您可以通過調用setPivot()
方法來調整其旋轉點。
View view = group.get(i);
view.setPivotX(0);
view.setPivotY(0);
view.setRotation(Math.PI/2);
這會將view
圍繞左上角旋轉到垂直角度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.