android live墙纸重新缩放

android live墙纸重新缩放,android,screen-resolution,live-wallpaper,Android,Screen Resolution,Live Wallpaper,我正在学习如何制作现场壁纸,但我有一个两难的选择,我相信所有刚开始的人都有 有这么多分辨率的屏幕尺寸,我怎么能只制作一套艺术品,在代码中对所有版本进行重新缩放?我知道这已经完成了,因为我在很多照片上看到了apk中的图像,它们被重新缩放 如果只是一个图像,不需要任何定位,这将很容易,但我的问题是,我必须重新缩放背景图像,以适应所有设备,我也有动画,适合在该背景图像上的某个x和y位置,以适应在适当的位置,所以看起来整个背景是动画,但只有部分是(我远离300张逐帧实时壁纸图片的方式) 因此,背景图像需

我正在学习如何制作现场壁纸,但我有一个两难的选择,我相信所有刚开始的人都有

有这么多分辨率的屏幕尺寸,我怎么能只制作一套艺术品,在代码中对所有版本进行重新缩放?我知道这已经完成了,因为我在很多照片上看到了apk中的图像,它们被重新缩放

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

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

如果有任何帮助,我将不胜感激,这样我就可以继续下去了



我厌倦了一些事情,我想我会为所有东西制作一个缩放器例如:int scaler;然后在onSurfaceChanged scaler=width/1024;//如果更大的图像是1024。这将给我一个在任何地方都可以使用的比率。然后使用scaleBitmap将缩放器乘以图像的高度和宽度进行相应的缩放,并使用相同的缩放器r定位示例图像x假设为50,使用相同的东西x=scaler*50进行缩放;这应该考虑缩放和定位,如何将所有这些转换为java是下一课,因为我是java新手,我曾经为flash和php编程,但这有很大不同,需要一些时间来适应。下一件事是如何平移宽度,当你把屏幕从一边移到另一边时,如何使图像显示是我要解决的下一个难题。现在它只显示相同的宽度,不管是什么,即使宽度是表面显示的两倍。如果你有答案或在什么地方,我可以找到关于这一点的信息,我将不胜感激。

嗯,嗯,我所能说的就是“欢迎来到现实世界”。你可以通过onSurfaceChanged将屏幕尺寸传递给你,是的,你的工作是找出如何根据这些数据扩展所有内容。这就是为什么他们给我们大笔钱的原因。:-) 您需要确保您的资源足够大,以适合您打算支持的最大显示,因此您将始终缩小内容(其扭曲程度远小于扩展内容)

建议从“屏幕独立性最佳实践”开始:

更多帮助请求中的其他评论

  • 您不能(必须)仅使用宽度缩放您的作品,因为您需要支持多个纵横比。如果屏幕比例与您的作品不匹配,您必须决定是否要扭曲您的作品,留下空白等
  • 我不知道如何解释你在屏幕尺寸上的问题。我们大多数人将所有活动代码放在一个引擎类中,因此我们的方法可以通过私有变量共享数据。例如,在SDK中的多维数据集墙纸中,onSurfaceChanged()设置mCenterX以供以后在drawCube()中使用。我建议从类似的简单方法开始
  • 处理滚动需要一些“智能”和对通过OnOffsetChanged()接收的数据的仔细评估。xStep指示启动器支持多少屏幕。通常xStep为0.25,表示5个屏幕(即xOffset=0、0.25、0.5、0.75或1),但它可以是0到1之间的任何值;0.5表示3个屏幕。xPixels为您提供了一个指示,说明启动器“希望”您根据屏幕上的图像进行多少移动;通常你应该尊重这一点。在我的手机上,启动器“想要”一张虚拟壁纸,它的像素是物理屏幕的两倍,所以每个滚动条应该只移动一个屏幕像素的四分之一。所有这些以及更多内容都记录在 这不是“容易”的编码——应用程序比墙纸更容易。:-) 祝你好运,乔治

    顺便说一句:在这条线上的某个地方,您可能希望检索启动器所需的墙纸的“所需最小宽度”,这样您就可以明确地理解xPixels中隐含的虚拟化。例如,在我的引擎构造函数中

    mContext = getApplicationContext();
    mWM = WallpaperManager.getInstance(mContext);
    mDW = mWM.getDesiredMinimumWidth();
    

    我的设备有320像素宽;我得到mDW=640;当我从一个屏幕滚动到另一个屏幕时,Xpixel每次变化80…因为四个滚动(跨越五个屏幕)被认为是显示艺术品数量的两倍(这种效果称为“视差滚动”)。最右边的部分的Xpixel等于0;中间(共五个)部分有xPixels=-160等等。

    嗯,我只能说“欢迎来到现实世界”。你可以通过onsurfacechange将屏幕尺寸传递给你,是的,你的工作是找出如何根据这些数据缩放所有内容。这就是为什么他们付给我们一大笔钱的原因。:-) 您需要确保您的资源足够大,以适合您打算支持的最大显示,因此您将始终缩小内容(其扭曲程度远小于扩展内容)

    建议从“屏幕独立性最佳实践”开始:

    更多帮助请求中的其他评论

  • 您不能(必须)仅使用宽度缩放您的作品,因为您需要支持多个纵横比。如果屏幕比例与您的作品不匹配,您必须决定是否要扭曲您的作品,留下空白等
  • 我不知道如何解释你在屏幕尺寸上的问题。我们大多数人将所有活动代码放在一个引擎类中,因此我们的方法可以通过私有变量共享数据。例如,在SDK中的多维数据集墙纸中,onSurfaceChanged()设置mCenterX以供以后在drawCube()中使用。我建议从类似的开始
    Bitmap image1, pic1;
    image1 = BitmapFactory.decodeResource(getResources(), R.drawable.image1);
    float xScale = (float) canvas.getWidth() / image1.getWidth();
                    float yScale = (float) canvas.getHeight() / image1.getHeight();
                    float scale = Math.max(xScale, yScale); //selects the larger size to grow the images by
    
                    //scale = (float) (scale*1.1); //this allows for ensuring the image covers the whole screen.
    
                    scaledWidth = scale * image1.getWidth();
                    scaledHeight = scale * image1.getHeight();
    
                        pic1 = Bitmap.createScaledBitmap(image1, (int)scaledWidth, (int)scaledHeight, true);