Android 旋转位图并保持大小

Android 旋转位图并保持大小,android,Android,我正在创建一个瓷砖板游戏。 我想将位图平铺块旋转几个预定角度。 旋转位图时,大小会发生变化。 例如,如果我想要一块75x75的三角形瓷砖,在旋转时,我从代码中得到一块68x68。我怎样才能保持事物的大小不变,使所有事物都保持董事会的大小 下面是我用来旋转的: public class RotatebitmapActivity extends Activity { @Override public void onCreate(Bundle icicle) { super.onCreate(

我正在创建一个瓷砖板游戏。 我想将位图平铺块旋转几个预定角度。
旋转位图时,大小会发生变化。
例如,如果我想要一块75x75的三角形瓷砖,在旋转时,我从代码中得到一块68x68。我怎样才能保持事物的大小不变,使所有事物都保持董事会的大小

下面是我用来旋转的:

public class RotatebitmapActivity extends Activity {
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    LinearLayout linLayout = new LinearLayout(this);

    // load the origial BitMap (500 x 500 px)
    Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 
           R.drawable.t123);

    int width = bitmapOrg.getWidth();
    int height = bitmapOrg.getHeight();
    int newWidth = 75;
    int newHeight = 75;

    // calculate the scale - in this case = 0.4f
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;

    // createa matrix for the manipulation
    Matrix matrix = new Matrix();
    // resize the bit map
    matrix.postScale(scaleWidth, scaleHeight);
    // rotate the Bitmap
    matrix.postRotate(120);

    // recreate the new Bitmap
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
                      width, height, matrix, true); 


    // make a Drawable from Bitmap to allow to set the BitMap 
    // to the ImageView, ImageButton or what ever
    BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);

    ImageView imageView = new ImageView(this);

    // set the Drawable on the ImageView
    imageView.setImageDrawable(bmd);

    // center the Image
    imageView.setScaleType(ScaleType.CENTER);

    // add ImageView to the Layout
    linLayout.addView(imageView, 
        new LinearLayout.LayoutParams(
                  LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT
            )
    );

    // set LinearLayout as ContentView
    setContentView(linLayout);
}

代码中出现的情况是,创建的位图大小正确。但是,所有位图都会自动缩放以适应当前使用的屏幕密度

有两种方法(我知道)可以得到你想要的结果

  • 可以在创建位图之后以及在将其包装到可绘制图形中之前设置位图的密度。为此,请添加类似以下内容的代码:

    resizedBitmap.setDensity(DisplayMetric.DENSITY_HIGH)

    此代码设置位图的设计密度,并可防止Android自动缩放图像

  • 第二种解决方案更多的是一种方法,而不是针对这一特定问题的具体解决方案。为此,我不想详述,请看


  • 希望有人能比我更好地回答您的问题。

    代码中发生的事情是,创建的位图大小正确。但是,所有位图都会自动缩放以适应当前使用的屏幕密度

    有两种方法(我知道)可以得到你想要的结果

  • 可以在创建位图之后以及在将其包装到可绘制图形中之前设置位图的密度。为此,请添加类似以下内容的代码:

    resizedBitmap.setDensity(DisplayMetric.DENSITY_HIGH)

    此代码设置位图的设计密度,并可防止Android自动缩放图像

  • 第二种解决方案更多的是一种方法,而不是针对这一特定问题的具体解决方案。为此,我不想详述,请看


  • 希望有人能比我更好地回答你的问题。

    没什么不同。无论是否使用最小设置,imageView仍为68x68。FIT_XY简单地将整个imageView缩放到全屏它与imageView无关-它是位图。当位图调整大小并旋转时,它的大小不正确。在ImageView上使用wrap内容只会被映射到其当前(不正确)大小。例如,如果我有一个150x150位图,希望它减少到75x75并旋转,在上面的代码中,resizedBitmap从createBitmap以102x102显示。然后,新的位图绘制工具bmd将由此创建,它是68x68。我不知道如何旋转一个物体,并保持瓷砖的大小不变——眼睛、机器人的比例。但是如果你指定你想要的尺寸,即75,你不应该得到75而不是68吗?仅仅让它返回任意大小是没有意义的。数字75仅用于举例说明。在实际代码中,只要我在旋转后得到与我输入的相同的大小,我就不会在意它。这是我帖子的原始问题-如何旋转位图并保持相同的大小?我删除了所有的评论并更新了我的答案(希望)对@Martin和任何其他看到它的人来说都更有意义和帮助。没有任何区别。无论是否使用最小设置,imageView仍为68x68。FIT_XY简单地将整个imageView缩放到全屏它与imageView无关-它是位图。当位图调整大小并旋转时,它的大小不正确。在ImageView上使用wrap内容只会被映射到其当前(不正确)大小。例如,如果我有一个150x150位图,希望它减少到75x75并旋转,在上面的代码中,resizedBitmap从createBitmap以102x102显示。然后,新的位图绘制工具bmd将由此创建,它是68x68。我不知道如何旋转一个物体,并保持瓷砖的大小不变——眼睛、机器人的比例。但是如果你指定你想要的尺寸,即75,你不应该得到75而不是68吗?仅仅让它返回任意大小是没有意义的。数字75仅用于举例说明。在实际代码中,只要我在旋转后得到与我输入的相同的大小,我就不会在意它。这是我帖子的原始问题-如何旋转位图并保持相同的大小?我删除了所有评论并更新了我的答案(希望)对@Martin和任何其他看到它的人都更有意义和帮助。检查我的答案[此处][1],毫无问题地工作[1]:检查我的答案[此处][1],毫无问题地工作[1]: