Android围绕中心点旋转位图,裁剪角落

时间:2015-05-30 00:01:00

标签: android canvas bitmap rotation image-rotation

简介

大家好!

我制作的应用会根据指南针的变化旋转包含我所在大学地图的位图。

我的大学和附近区域有一个方形的图片,在我的手机上它有点扁平化:

enter image description here

现在我只需要显示校园区域,我通过在自定义View的画布上绘制该位图的Rectangle部分来实现:

enter image description here

问题

我的问题是我无法围绕中心点旋转位图。

现在旋转30度看起来像这样:

enter image description here

它完全没有工作,校园从较小的矩形中消失。

我希望图像围绕它的中心旋转,我希望图像的角落离开画布,这样校园就会停留在同一个地方并且旋转得很好。

目前的方法

要显示地图,我有自定义View with overriden onDraw方法。

@Override
protected void onDraw(Canvas canvas) {
    Rect rekt = new Rect();
    Rect tyrRekt = new Rect();

    super.onDraw(canvas);

    tyrRekt.set(0, 0, canvas.getWidth(), canvas.getHeight());
    rekt.set(350, 370, 1520, 900);

    canvas.drawBitmap(bitmap, rekt, tyrRekt, null);
}

并且在AsyncTask中旋转位图以保存一些内存,RotateTaskParams是一个具有oryginal位图和度数的对象:

@Override
protected Bitmap doInBackground(RotateTaskParams... params) {
    Matrix matrix = new Matrix();
    matrix.postRotate(params[0].deg);
    rotateBitmap = new WeakReference<Bitmap>(Bitmap.createBitmap(params[0].bmp, 0, 0 ,params[0].bmp.getWidth(), params[0].bmp.getHeight(), matrix, true ));
    return rotateBitmap.get();
}

我尝试的事情

我正在寻找很多东西,在这里阅读了大量的simliar问题,并尝试了很多答案。 什么对我不起作用(也许我做错了什么)

  • postTranslating matrix(center to the 0,0)
  • 旋转画布
  • postRotate围绕位图的中心

    matrix.postTranslate(params [0] .deg,params [0] .bmp.getWidth()/ 2,params [0] .bmp.getHeight()/ 2);

params [0] .bmp始终是一个原始图像。

提前致谢!

2 个答案:

答案 0 :(得分:0)

试试

matrix.postRotate(90);
Bitmap rotated = Bitmap.createBitmap(originalBitmap, 0, 0, originalBitmap.getWidth(),
                            originalBitmap.getHeight(), matrix, true);

并在您的xml中,将android:scaleType =“centerCrop”设置为您的ImageView标记。 希望它有所帮助。

答案 1 :(得分:0)

通过从位图绘制切换到谷歌地图,帮助我实现良好表现的想要结果的原因是,它的API具有此处所需的一切