【问题标题】:Images not rescaling proportionality in Android图像在 Android 中没有重新缩放比例
【发布时间】:2013-09-24 22:51:28
【问题描述】:

我的问题很简单,但是我没有找到解决方案;我希望位图根据屏幕尺寸重新缩放。

问题图片:

下面是代码,我不确定要包含多少,因为我真的不知道为什么会发生这种情况。

public TitleView(Context context) {
    super(context);

    myContext = context;
    titleGraphicFixed = BitmapFactory.decodeResource(getResources(),
            R.drawable.title_background);
    playButtonUpFixed = BitmapFactory.decodeResource(getResources(),
            R.drawable.button_play_up);
    playButtonDownFixed = BitmapFactory.decodeResource(getResources(),
            R.drawable.button_play_down);
}

@Override
public void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    screenW = w;
    screenH = h;

    drawScaleW = (float) screenW / 800;
    drawScaleH = (float) screenH / 600;

    Log.d(TAG, "Screen Width: " + drawScaleW);
    Log.d(TAG, "Screen Height: " + drawScaleH);

    titleGraphic = Bitmap.createScaledBitmap(titleGraphicFixed, screenW,
            screenH, true);
    playButtonUp = Bitmap.createScaledBitmap(playButtonUpFixed,
            (int) (playButtonUpFixed.getWidth() * drawScaleW),
            (int) (playButtonUpFixed.getHeight() * drawScaleH), true);
    playButtonDown = Bitmap.createScaledBitmap(playButtonDownFixed,
            (int) (playButtonDownFixed.getWidth() * drawScaleW),
            (int) (playButtonDownFixed.getHeight() * drawScaleH), true);

编辑:

我正在构建“Android Game Programming For Dummies”一书中的一个示例,因为这是我为 android 编写的第一个应用程序/游戏。对于他的游戏标题/菜单页面,作者没有使用 XML 布局。

这是我目前使用的代码的链接:

MainActivity

TitleView

第二次编辑:

以下是从日志中获得的详细信息,以下文字的布局使得左边是上图设备中较小的,右边是较大的。

屏幕宽:320、800 屏幕H:240、480

比例 W:0.4、1.0 比例 H:0.4、0.8

(到目前为止,所有的数学加起来/都是正确的,但是这里是不是疯了

按钮图片的实际按钮尺寸:W220、H67

计算的按钮大小: 宽:66、330 高:20、80

显然这是错误的,例如小屏幕,H67 * 0.4 不等于 20。所以我去看看按钮导入后的宽度和高度是多少,发现:

宽:165、330 H: 50, 101

这意味着对于小屏幕,一旦创建了位图(但未重新缩放,它会自动重新缩放实际按钮图像大小的 0.75)。对于更大的屏幕,它在创建时被调整为 1.5。但我无法为我的爱找出原因!

【问题讨论】:

  • 这有什么问题?
  • 理论上,按钮的大小应该相同(相对于屏幕大小),但事实并非如此。

标签: java android image bitmap scaling


【解决方案1】:

对我来说,这个问题与Auto Scale TextView Text to Fit within BoundsAndroid Buttons not scalingScale text in a view to fit? 有关。

您可能会在这些问题中找到适合您情况的解决方案,但我遇到了类似的问题,我发现用ImageButton 对象替换我的Button 对象并生成匹配的图像解决了我的情况。

遵循Supporting Multiple Screens 中提到的图标大小比例:0.75x : 1 : 1.5x : 2x。

【讨论】:

  • 感谢您的回复,尽管答案对阅读有益,但它并没有(直接)回答问题。用 ImageButton 对象替换我的“Button 对象”的解决方案可能有效,但是在重新缩放方面这个问题不仅存在于按钮,而且存在于所有图像。
  • 显然我误解了这个问题。你能发布你的布局 XML 吗?
  • 抱歉,问题很可能是我自己。如果您不介意看一下,我已经用更多信息更新了帖子。谢谢。
  • 我没有遇到过这样的问题,所以我也在这里学习。不知何故,看起来比例因子是错误的。两组Log.d(..."Screen Width: " 和高度线的输出是什么? (建议您将第二对更改为“drawScaleW”等)。如果将canvas.setMatrix (null); 放在canvas.drawBitmap(titleGraphic, 0, 0, null); 之后,onDraw 会发生什么?
  • canvas.setMatrix (null);什么也没做。我已经用从日志中获得的所有相关数学编辑了这篇文章。
【解决方案2】:

我(认为)我找到了答案:

I don't want Android to resize my bitmap Automatically

基本上,小屏幕属于 ldpi,而另一个屏幕(如图)是 mdpi 或 hdpi。显然,drawable 文件夹将图像视为与 mdpi 相同,因此这就是为什么它在大屏幕上过度缩放而在小屏幕上缩放不足。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2014-04-20
    相关资源
    最近更新 更多