Android 绕备用轴旋转
我正在努力进行位图旋转。我希望绕一个备用轴旋转一个图形,但我只能让它绕中心点旋转,不管我做什么,在PostTranslate中。翻译前,以任何顺序设置翻译都不起作用。我也尝试过后旋转(45,0,0),但它总是围绕中心旋转。 下面的代码采取的互联网我会怎么做,以改变其旋转点,下面的代码使用的发射器图标,这是方形的,我正在使用一个细长的图形,如箭头Android 绕备用轴旋转,android,Android,我正在努力进行位图旋转。我希望绕一个备用轴旋转一个图形,但我只能让它绕中心点旋转,不管我做什么,在PostTranslate中。翻译前,以任何顺序设置翻译都不起作用。我也尝试过后旋转(45,0,0),但它总是围绕中心旋转。 下面的代码采取的互联网我会怎么做,以改变其旋转点,下面的代码使用的发射器图标,这是方形的,我正在使用一个细长的图形,如箭头 // Rotate image to 45 degrees. public void RotateImage(){ ImageView ima
// Rotate image to 45 degrees.
public void RotateImage(){
ImageView image;
Bitmap bMap;
Matrix matrix;
//Get ImageView from layout xml file
image = (ImageView) findViewById(R.id.imageView1);
//Decode Image using Bitmap factory.
bMap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
//Create object of new Matrix.
matrix = new Matrix();
//set image rotation value to 45 degrees in matrix.
matrix.postRotate(45);
//Create bitmap with new values.
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,
bMap.getWidth(), bMap.getHeight(), matrix, true);
//put rotated image in ImageView.
image.setImageBitmap(bMapRotate);
}
我试过下面的代码,但它仍然围绕中心旋转,或者至少也会出现
public void RotateImage{
ImageView image;
Bitmap bMap;
Matrix matrix;
//Get ImageView from layout xml file
image = (ImageView) findViewById(R.id.imageView);
//Decode Image using Bitmap factory.
bMap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
//Create object of new Matrix.
matrix = new Matrix();
//set image rotation value to 45 degrees in matrix.
matrix.setTranslate(-100,-200);
matrix.postRotate(angle);
matrix.postTranslate(100,200);
//Create bitmap with new values.
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,
bMap.getWidth(), bMap.getHeight(), matrix, true);
//put rotated image in ImageView.
image.setImageBitmap(bMapRotate);
谢谢如果您希望位图使用轴(a,b)绕x轴旋转45度,可以调用
矩阵。旋转(45,a,b)
也许您希望使用Camera类绕x、Y或Z轴旋转:
matrix = new Matrix();
Camera camera = new Camera();
camera.save();
camera.rotateX(45f);
camera.getMatrix(matrix);
camera.restore();
我理解您的问题的方式是,您希望围绕某个点旋转图像,例如
(x,y)
。从概念上讲,您需要对图像执行以下转换:
(-x,-y)
(x,y)
可以使用此方法从中心旋转对象。在“精灵”类中创建此方法
public void paintFromCenter(float angle, Canvas c) {
Bitmap b = sprite;
Bitmap h = b;
// Canvas canvas = new Canvas(a);
Matrix matrix = new Matrix();
matrix.postRotate(angle, h.getWidth() / 2, h.getHeight());
matrix.postTranslate(getX(), getY());
// canvas.drawBitmap(bitmap, matrix, new Paint());
Bitmap bmp2 = Bitmap.createBitmap(h, 0, 0, frameWidth, frameHeight,
matrix, true);
c.drawBitmap(h, matrix, null);
// g.getCanvas().drawBitmap(bmp2, getX(), getY(), null);
}
现在在onTouchEvent()中
试试看矩阵似乎没有旋转方法,我想你可能是指后旋转(45,a,b),它似乎仍然围绕中心旋转,文档确实表明这是可行的,但是我的总是出现在中间,我猜想这个视图可以重定向它,但是就是不能解决它。@ USER 31297可以提供你正在使用的示例值吗?还发布了一些a和b不同值的输出屏幕截图。你指的是哪个
Camera
类?android.graphics.CameraI我认为这并不能回答这个问题。我把这个问题理解为询问如何围绕图像中心以外的另一点旋转图像。我同意我没有使用相机图像,我在抽屉里用的是图形folder@pskink是一样的。这就是postRotate()
文档的意思吗?在我看来,这些文档是神秘的,或者使用了我不熟悉的数学符号。我添加了下面的内容,但它保持在中心位置。我不太理解PRE、Post、Set前缀,所以只是猜测,但它仍然围绕中心矩阵旋转。setTranslate(-100,-200);矩阵。旋转后(角度);矩阵。后翻译(100200)@用户3129787如果仍然无法工作,请使用转换的完整代码编辑OP。电话的准确顺序在这里非常重要。
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
evX = (int) event.getX();
evY = (int) event.getY();
int initX = objectSprite.getX();
int inity = objectSprite.getY();
if ((evX > objectSprite.getX()
&& evX < objectSprite.getX() + objectSprite.getWidth()
&& evY > objectSprite.getY() && evY < objectSprite.getY()
+ objectSprite.getHeight())) {
if (angle < 90) {
angle += 5;
} else if (angle < -180)
angle -= 5;
}
}
return true;
}
private void draw(Canvas canvas) {
objectSprite.paintFromCenter(angle, canvas);
}