安卓动态壁纸重新缩放

sam*_*sam 3 android screen-resolution live-wallpaper

我正在学习如何制作动态壁纸,但我有一个两难的境地我确信所有开始的人都有.

有如此多的分辨率屏幕尺寸,我如何才能在一段代码中为所有版本重新调整一组艺术作品?我知道它已经完成,因为我在很多人看到了apk中的图像并且它们被重新缩放.

如果它只是一个不需要任何定位的图像很容易,但我的问题是我必须重新调整背景图像以适应所有设备,我也有适合该背景上某个x和y位置的动画图像适合到位,所以看起来整个背景都是动画的,但只有部分是(我的方式远离300帧图像的逐帧动态壁纸).

因此需要重新调整背景图像,并且动画需要重新缩放到与背景图像完全相同的百分比,并且它们需要位于特定的x和y位置.

任何帮助将不胜感激,所以我可以得到这个.


我厌倦了一些事情,我想我会为所有例子制作一个缩放器:int scaler; 然后在onSurfaceChanged scaler = width/1024; //如果较大的图像是1024.这将给我一个与任何地方一起工作的比率.然后通过将缩放器乘以图像的高度和宽度,使用scaleBitmap进行相应缩放,并使用相同的缩放器进行定位示例图像x,假设为50,使用相同的比例缩放x = scaler*50; 应该注意缩放和定位,如何将所有这些转换为java是下一课,因为我是java的新手,我曾经为flash和php编程但是这有很多不同,需要一些习惯.接下来是如何平移宽度,当您将屏幕从一侧移动到另一侧时如何使图像显示是我已经弄清楚的下一个难题.现在它只是显示相同的宽度,即使宽度是表面显示的两倍.如果你有答案或某个地方,我可以找到关于这个的信息,将非常感谢.

Geo*_*man 12

好吧,嗯,我只能说"欢迎来到现实世界".您可以通过onSurfaceChanged将屏幕尺寸传递给您,是的,您可以根据这些数据找出如何扩展所有内容的工作.这就是为什么他们付给我们大笔钱.:-)你需要确保你的资源足够大,以适应你想要支持的最大显示,所以你总是会缩小的东西(比扩展的东西扭曲得多).

建议从"屏幕独立性最佳做法"开始:http://developer.android.com/guide/practices/screens_support.html

您需要更多帮助的其他评论......

  1. 您不能(必然)仅使用宽度缩放图片,因为您需要支持多个宽高比.如果屏幕比例与您的作品不符,您必须决定是否要扭曲您的作品,留空格等.
  2. 我不知道如何解释你绕过屏幕尺寸的麻烦.我们大多数人将所有活动代码放在一个引擎类中,因此我们的方法可以通过私有变量共享数据.例如,在SDK中的Cube壁纸中,onSurfaceChanged()设置mCenterX以供稍后在drawCube()中使用.我建议从一个类似的,简单的方法开始.
  3. 处理滚动需要一些"智能"并仔细评估您通过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();
Run Code Online (Sandbox Code Playgroud)

我的设备有320像素宽; 我得到mDW = 640; 当我从屏幕滚动到屏幕时,xPixels每次都会改变80 ...因为四个卷轴(跨越五个屏幕)应该使显示的艺术品数量加倍(这种效果称为"视差滚动").最右边的部分xPixels等于0; 中心(五个)部分有xPixels = -160等.