我正在学习如何制作动态壁纸,但是我有一个困境,我敢肯定所有刚开始的人也都有。
分辨率屏幕的尺寸太多了,如何仅用一套代码就所有版本的代码进行缩放?我知道它已经完成了,因为我在很多APK中都看到了APK中的图像,并对其进行了缩放。
如果只是一幅图像,不需要任何简单的定位,但是我的问题是我必须重新调整背景图像的大小以适合所有设备,那么我的动画也适合该背景上某个x和y位置图像就位,因此看起来好像整个背景都在动画中,但是只有一部分是动态的(我的方式是远离300张逐帧动态壁纸的图像)。
因此,背景图像需要重新缩放,动画也需要重新缩放到与背景图像完全相同的百分比,并且它们必须位于特定的x和y位置。
任何帮助将不胜感激,所以我可以做到这一点。
我累了几件事,以为我可以为所有示例做一个洁牙机:int scaler; 然后在onSurfaceChanged scaler = width / 1024; //如果较大的图像是1024,那么我可以在任何地方使用它。然后使用scaleBitmap通过将缩放器乘以图像的高度和宽度相应地缩放,并且还使用相同的缩放器来定位示例图像x假设其值为50,并使用相同的东西对其进行缩放x =缩放器* 50; 下一章将讲解如何缩放和定位,只是如何将所有这些内容翻译成java,因为我是java的新手,所以我曾经为Flash和php编程,但这有很大的不同,需要一些时间来适应。接下来的事情是如何平移宽度,当您左右移动屏幕时,如何显示图像是我想出的下一个难题。现在,即使宽度是表面显示的两倍,它仍然显示相同的宽度。如果您有答案或在某个地方,我可以找到有关该信息的信息,将不胜感激。
好吧,嗯,我只能说“欢迎来到现实世界”。您可以通过onSurfaceChanged将屏幕尺寸传递给您,是的,确定如何根据此数据缩放所有内容是您的工作。这就是为什么他们付给我们大笔钱的原因。:-)您将要确保您的资源足够大以适合您打算支持的最大显示,因此您将始终在缩小内容(与扩大内容相比,失真程度要小得多)。
建议从此处“屏幕独立性最佳做法”开始: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中 这不是“简单”的编码-应用比墙纸更容易。:-) 祝你好运…乔治
PS我将再介绍一件事:您可能想检索启动器所需墙纸的“所需最小宽度”,因此您可以显式理解xPixels中隐含的虚拟化。例如,在我的引擎构造函数中,
mContext = getApplicationContext(); mWM = WallpaperManager.getInstance(mContext); mDW = mWM.getDesiredMinimumWidth();
我的设备有320像素的宽度;我得到mDW = 640; 当我从一个屏幕滚动到另一个屏幕时,xPixels每次都会改变80 …因为四个滚动(跨越五个屏幕)应该使所显示的图稿数量翻倍(这种效果称为“视差滚动”)。最右边的部分的xPixels等于0;(五个)中心部分的xPixels = -160,依此类推。