我正在学习如何制作动态壁纸,但我有一个困境,我相信所有刚开始的人也有这样的困境。
有这么多分辨率的屏幕尺寸,我怎样才能使一组艺术品在代码中为所有版本重新缩放?我知道它已经完成了,因为我看到了很多应用程序中的图像,并且它们被重新缩放。
如果只是一张不需要任何定位的图像,那就很容易了,但我的问题是我必须重新调整背景图像以适合所有设备,我还有适合该背景上某个 x 和 y 位置的动画图像适合到位,这样看起来整个背景都在动画化,但只有部分背景是动画化的(我的方式是远离 300 张逐帧动态壁纸图像)。
因此,背景图像需要重新缩放,动画也需要重新缩放到与背景图像相同的百分比,并且它们需要位于特定的 x 和 y 位置。
任何帮助将不胜感激,以便我能够继续下去。
我厌倦了一些事情,想我会为所有事情制作一个缩放器,例如:int scaler;然后在onSurfaceChanged中scaler = width /1024; //如果更大的图像是1024。这将为我提供一个可以在任何地方使用的比率。然后使用scaleBitmap进行相应缩放,方法是将缩放器乘以图像高度和宽度,并使用相同的缩放器来定位示例图像x,假设图像x为50,使用相同的东西缩放它x =缩放器* 50;应该负责缩放和定位,下一课就是如何将所有这些转换为 java,因为我是 java 新手,我曾经为 flash 和 php 编程,但这有很大不同,需要一些时间来适应。接下来的事情是如何平移宽度,当您将屏幕从一侧移动到另一侧时,如何使图像显示是我想出的下一个难题。现在,无论如何,即使宽度是表面显示的宽度的两倍,它也只显示相同的宽度。如果您得到答案或在某个地方我可以找到有关此问题的信息,我将不胜感激。
嗯,嗯,我只能说“欢迎来到现实世界”。您可以通过 onSurfaceChanged 将屏幕尺寸传递给您,是的,您的工作就是弄清楚如何根据此数据缩放所有内容。这就是为什么他们付给我们大笔钱。 :-)
您需要确保您的资源足够大,可以容纳您打算支持的最大显示器,因此您将始终缩小事物(这比扩展事物造成的扭曲要小得多)。
建议从此处的“屏幕独立性最佳实践”开始:http://developer.android.com/guide/practices/screens_support.html http://developer.android.com/guide/practices/screens_support.html
关于您寻求更多帮助的请求的附加评论...
- 您不能(必然)仅使用宽度来缩放图稿,因为您需要支持多种纵横比。如果屏幕比例与您的作品不匹配,您必须决定是否要扭曲您的作品、留下空白等。
- 我不知道如何解释你在屏幕尺寸上遇到的麻烦。我们大多数人将所有活动代码放在一个引擎类中,因此我们的方法可以通过私有变量共享数据。例如,在SDK中的Cube壁纸中,onSurfaceChanged()设置mCenterX以便稍后在drawCube()中使用。我建议从类似的简单方法开始。
- 处理滚动需要一些“智能”并仔细评估通过 onOffsetsChanged() 收到的数据。 xStep 指示您的启动器支持的屏幕数量。通常 xStep 为 0.25,表示 5 个屏幕(即 xOffset = 0、0.25、0.5、0.75 或 1),但它可以是 0 到 1 之间的任何值; 0.5 表示 3 个屏幕。 xPixels 可让您了解启动器“希望”您根据您所在的屏幕移动图像的程度;通常你应该尊重这一点。在我的手机上,启动器“需要”具有两倍于物理屏幕像素的虚拟壁纸,因此每个滚动应该仅移动屏幕像素的四分之一。所有这些以及更多内容都记录在http://developer.android.com/reference/android/app/WallpaperManager.html http://developer.android.com/reference/android/app/WallpaperManager.html这不是“简单”的编码——应用程序比壁纸更容易。 :-)
祝你好运...乔治
附:我还要再补充一件事:在某个地方,您可能想要检索启动器所需的壁纸的“所需最小宽度”,这样您就可以明确地理解 xPixels 中隐含的虚拟化。例如,在我的引擎构造函数中,我有
mContext = getApplicationContext();
mWM = WallpaperManager.getInstance(mContext);
mDW = mWM.getDesiredMinimumWidth();
我的设备宽度为 320 像素;我得到 mDW = 640;当我从一个屏幕滚动到另一个屏幕时,xPixels 每次都会改变 80...因为四个滚动(跨五个屏幕)应该使显示的艺术品数量加倍(这种效果称为“视差滚动”)。最右边的部分 xPixels 等于 0;中心(五个)部分的 xPixels = -160 等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)