簡體   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