[英]Java Animated transparent splash screen
我想制作一個帶有動畫gif的啟動畫面。 我的動畫gif具有透明背景,因此我只想將gif的可見部分顯示為初始屏幕。 首先,我必須指定我正在使用Matlab,因此不可能(或我還沒有找到方法)覆蓋組件/功能。 這是我的示例代碼:
win = javax.swing.JWindow;
jl = javax.swing.JLabel(javax.swing.ImageIcon('C:\Users\ME\Documents\loader512-.gif'));
win.getContentPane.add(jl);
win.setAlwaysOnTop(true);
win.pack;
%% set the splash image to the center of the screen
screenSize = win.getToolkit.getScreenSize;
screenHeight = screenSize.height;
screenWidth = screenSize.width;
% get the actual splashImage size
imgHeight = 512;
imgWidth = 512;
win.setLocation((screenWidth-imgWidth)/2,(screenHeight-imgHeight)/2);
win.show
搖動圖像效果很好,但是取決於窗口的透明度,其背景為白色或灰色。 我還嘗試過使用JLabel的背景,但沒有成功。
請幫忙 !
代碼的問題在於,每個給定的窗口都有特定的定義形狀。 在不更改形狀的情況下,每個Window對象都有一個矩形畫布,可以在其中繪制畫布。 僅當您在GIF圖像后面繪制對象時,透明度才適用。 如果啟用了透明性,則渲染器僅繪制背景色(通常為黑色或白色或某些淺灰色),如果沒有其他顏色。
自Java 7發行以來,新方法稱為setShape(Shape);。 出現在Window對象中。 如果您的動畫GIF具有固定的透明度“區域”,建議您創建一個自定義java.awt.Shape對象,在其中通過設置形狀傳遞給win對象。
例:
win = javax.swing.JWindow;
jl = javax.swing.JLabel(javax.swing.ImageIcon('C:\Users\ME\Documents\loader512-.gif'));
win.getContentPane.add(jl);
Shape S = createCustomShape(); //Create your shape
win.setShape(S);
win.setAlwaysOnTop(true);
//{rest of code...}
如果動畫GIF的透明背景不斷變化,則必須創建一個復雜的實現,其中Shape對象將響應GIF逐幀更新。 我認為,如果是這種情況,我不會打擾。 :)
注意Shape“對象”實際上是一個接口,可以使用實現子類之一,也可以創建自己的子類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.