1

我的应用程序中心有一个圆形。在 480x800 分辨率下,一切都很完美,但在 320x480 分辨率下,圆圈太小了。我在 drawable-hdpi 文件夹中有一个 circle.png,大小为 470px x 470px。我尝试在 drawable-mdpi 文件夹中添加一个 310x310 的 circle.png,但结果是一样的。这是布局xml的代码:

<ImageView
    android:id="@+id/indicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"

    />

在每种分辨率下,圆圈与显示器左右边缘的距离是否可能只有几个像素?

http://imageshack.us/photo/my-images/857/apppv.jpg/

编辑:我最终以这种方式解决了这个问题:

LayoutParams lp = indicator.getLayoutParams();
lp.width = (int) (disW-(disW*0.06));
lp.height = (int) (disW-(disW*0.06));
indicator.setLayoutParams(lp);

//这工作得很好,纵横比是正确的。

EDIT2:这根本不是一个解决方案,因为缩放图像的图像质量真的很差......但我找到了两个教程:http: //developer.sonymobile.com/wp/2011/06/27/how- to-scale-images-for-your-android%E2%84%A2-application/ http://android.creid.eu/how-to-resize-an-image-and-preserve-quality/

我必须弄清楚哪个是最好的方法...

4

3 回答 3

1

如果您作为链接附加的圆形图像是您选择的样式。你可以使用这个xml。并将此可绘制对象称为相对布局或背景,同时在 xml 中指定其布局:高度和布局:宽度。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
    <gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF" android:angle="270"/>
</shape>
于 2012-06-24T15:50:56.510 回答
1

我的第一个想法是清理你的决议。

您的图像在数字上具有尴尬的尺寸。470 = 2 * 5 * 47。虽然从纯粹的数论角度来看,47 是一个迷人的数字,但在这里它对你没有好处,因为它不能被分解以使你受益。你的另一个维度,310 = 2 * 5 * 31,也好不到哪里去。问题是您正在使用(相对而言)47 和 31 的大素数。我不知道您的主图像是什么样的,但是,假设您只有 470x 和 310x 可以使用,它我的建议是将 470 倍放大,是的,放大到 480 倍,并从中导出所有较小的图像。我的推理如下。

我的图像尺寸方法

谷歌最近(好吧,不久前)将他们的文档放在一起,并为 Android 制作了一流的设计指南。特别是,页面上有一个关于支持多个屏幕的漂亮小图形:

Android 密度

我想将这张图总结如下:

  • xdpi : 8 (我知道,我知道,我跳过了'h'。我认为这里很愚蠢)
  • 高清:6
  • mdpi:4
  • 低密度脂蛋白:3

但我不同意他们使用 mdpi 作为“基线”。相反,我将所有主图像设计为具有至少 24 的倍数的宽度和高度尺寸 - 上述整数的 LCM(最小公倍数)。有时添加一个因子 5 很方便,这将使 LCM 达到 120。如果看起来太大,我可能会使用 72 来代替 - 一个包含一堆 2 和 3 的奇妙数字。

无论如何,当我选择一个“基线”时,我选择的是一个数字,它的因数中有少数 2 和 3,有时是 5。然后我将该基线乘以 2 的某个幂,通常是 4或 8,确定我的主图像的大小。这使我能够以多种不同的方式缩小母版以适应设计需求。顺便说一句,这就是 Apple 等人决定事情的方式。(你有没有注意到 iPhone 的 480 = 2 * 2 * 2 * 2 * 2 * 3 * 5?而对于 320,你将 3 换成另一个 2。)

无论如何,480 的主图像尺寸应该适合你,因为它似乎在绝对尺寸方面符合你的要求(如果我错了,请纠正我),并且一开始的轻微放大不应该花费你任何有损保真度的东西,因为你只是要把它缩小,或者安卓会。

虽然所有这些都不能直接解决你的问题,但我认为它会帮助你一点,并将事情带到一个更灵活的基础上。

所以这是我的第一个想法:)

使用 LinearLayout 实现百分比

我的第二个想法是带来一些布局技巧。这会更简单一些,并且会更直接地解决您的“平等边界”问题。

使用根据此伪 XML 组织的 LinearLayout:

<LL width=match height=wrap horizontal>
<View width=0 height=0 weight=.05 invisible/>
<ImageView width=wrap height=wrap src=mycircle/>
<View width=0 height=0 weight=.05 invisible/>
</LL>

不可见视图将充当间隔,其宽度将由布局引擎在运行时确定,总计 0.05 + .05 = .1 = 屏幕宽度的 10%,迫使你的圆圈占据剩余的90%。(您当然可以将 .05 调整为您喜欢的任何值。)然后,Android 将选择正确的 ?dpi 并将其强制为屏幕尺寸的 90%。您在选择上述各种图像尺寸时所付出的努力将在缩放图像时获得保真度的红利。

这就是我对解决问题的最佳方法的看法。将奇怪的 47 和 31 素数转换为图像尺寸的因素,以支持附近的数字(48 和 32),它们是低素数 2、3 甚至 5 的组合,然后使用不可见的间隔视图强制 Android 的布局引擎。

祝你好运!

于 2012-06-24T17:47:16.060 回答
0

您可以为这个简单的图形使用 9 个补丁。这是一个很好的解释什么是9补丁以及如何使用它。 http://radleymarx.com/blog/simple-guide-to-9-patch/

于 2012-06-24T14:30:07.657 回答