好吧,嗯,我只能说“欢迎来到现实世界”。您可以通过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,依此类推。