2012-06-24 104 views
1

我的应用程序中心有一个圆形的圆圈。在480x800的分辨率下,一切都很完美,但在320x480的分辨率下,这个圆圈太小了。我在470px x 470px的drawable-hdpi文件夹中有一个circle.png。我试图在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调整大小-AN-图像和保存质量/

我得把这是最好的办法......

+0

你应该用'[android-layout]'而不是'[layout]':)来标记这个标记 –

回答

1

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

您的图片在尺寸上具有数值上的尴尬。 470 = 2 * 5 * 47.尽管从纯粹的数理论角度来看,47是一个非常吸引人的数字,但它在这里并没有好处,因为它不能被分解到你的利益。你的另一个维度,310 = 2 * 5 * 31,不会更好。问题在于你正在使用(相对来说)47和31的大质数。我不知道你的主图像是什么样的,但是,假设你只有470x和310x可以工作,它我的建议是将470x的比例提高到480x,并从中得到所有较小的图像。我的推理如下。

我对图像尺寸的方法

谷歌最近(嗯,好吧,不多时后)得到了他们的文件的共同行动并产生了顶级design guide for Android。特别地,在页面上一个可爱的小图形约Supporting Multiple Screens

Android densities

我喜欢如下总结本图文:

  • xdpi:8(我知道,我知道,我跳过'h'。我认为这是愚蠢的在这里)
  • 华电国际:6
  • MDPI:4
  • LDPI:3

但我不同意为他们的使用MDPI作为 “基线”。相反,我设计的所有主图像的宽度和高度尺寸至少为24的倍数 - 上述整数的LCM(最小公倍数)。有时添加一个5的因子是很方便的,这会使LCM达到120.如果这看起来太大,我可能会用72来代替 - 这是一个很好的数字,里面有一堆2和3。无论如何,当我选择一个'基线'时,我所选择的是一个数字,它的因子中有几个2和3,有时是5。然后,我用这个基线乘以2,通常是4或8,以确定我的主图像的大小。这使我可以通过多种不同的方式缩减主人,以适应设计需求。顺便说一句,这是苹果等人如何决定事情。 (你有没有注意到iPhone的480 = 2 * 2 * 2 * 2 * 2 * 3 * 5?而对于320你换了3与另一个2)。

无论如何,主图像大小为480为你工作,因为它似乎在绝对大小方面处于你的球场(如果我错了,请纠正我),而在开始时的轻微升级不应该以忠诚的方式付出任何代价,因为你只是要缩小它,或者Android会。

尽管所有这些都不能直接解决您的问题,但我认为这会帮助您稍微放松一点,并将其带入更灵活的基础。

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

与LinearLayout中

我的第二个想法是把一些布局弄虚作假承担实现百分比。这会稍微简单一点,并且会更直接地解决您的“相同边界”问题。

使用根据本04-0030-03-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素数转换为图像尺寸的因子,转而使用低质数2,3和大概5的组合的附近数字(48和32),然后使用不可见的间隔视图强制Android的布局引擎。

祝你好运!

0

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

+0

我也想过9个补丁,但是图形非常复杂并且有很多细节,所以我认为这是不可能的在这种情况下使用9补丁。 – Gingerbread123321

+0

hdpi/mdpi文件夹取决于像素密度,而不是分辨率。您可以以编程方式对其进行缩放。您知道屏幕分辨率和方向,只需进行数学运算并以编程方式设置尺寸。 – user1478190

1

如果您作为链接附加的圆形图像是您选择的样式。你可以使用这个XML。并将此drawable调用到相对布局或作为背景的东西,并指定其布局:height和layout: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>