繁体   English   中英

android动态壁纸缩放

[英]android live wallpaper rescaling

我正在学习如何制作动态壁纸,但是我有一个困境,我敢肯定所有刚开始的人也都有。

分辨率屏幕的尺寸太多了,如何仅用一套代码就所有版本的代码进行缩放? 我知道它已经完成了,因为我在很多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

您有其他评论以寻求更多帮助...

  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();

我的设备有320像素宽度; 我得到mDW = 640; 当我从一个屏幕滚动到另一个屏幕时,xPixels每次更改80 ...因为四个滚动(跨越五个屏幕)应该使所显示的图稿数量翻倍(这种效果称为“视差滚动”)。 最右边的部分的xPixels等于0; (五个)中心部分的xPixels = -160,依此类推。

我已使用此代码段缩放一个图像以适合不同的屏幕尺寸。

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);

确保边缘不包含重要信息,因为在某些屏幕比例下它将被缩小到图片之外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM