2015-05-07 50 views
0

我剛剛編寫了一個在JavaFX中使用滾動窗格的簡單示例。只有一個ScrollPane放置在場景中,並且ScrollPane擁有一個帶有大文本的Label組件。使用gradle我已經在Nexus 4 Android設備上上傳了應用程序。正如你可以從the video I have uploaded看到的那樣,滾動速度太慢了。我相信其他人已經經歷了這一點。任何有關如何將其更改爲本地速度滾動的建議都非常感謝。Android上的JavaFX ScrollPane - 太慢

該應用的源代碼可以是downloaded from here

AndroidFX.java

public class AndroidFX extends Application{ 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Parent mySearchListFXML = getFXMLPane("/fxml/ScrollPaneWithLabel.fxml"); 
     primaryStage.setScene(new Scene(mySearchListFXML)); 
     primaryStage.setWidth(Screen.getPrimary().getVisualBounds().getWidth()); primaryStage.setHeight(Screen.getPrimary().getVisualBounds().getHeight());  
     primaryStage.show(); 
    } 

    public static Parent getFXMLPane(String url) throws IOException { 
     URL location = AndroidFX.class.getResource(url); 
     FXMLLoader fxmlLoader = new FXMLLoader(); 
     fxmlLoader.setLocation(location); 
     Parent pane = fxmlLoader.load(); 
     return pane; 
    } 
} 

ScrollPaneWithLabel.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 

<ScrollPane fx:id="scrollPane" fitToWidth="true" hbarPolicy="NEVER" pannable="true" style="-fx-background: white;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <content> 
     <Label text="<VERY LARGE TEXT HERE>" wrapText="true" /> 
    </content> 
</ScrollPane> 

回答

0

面臨着類似的問題。 hidpi設備的問題更嚴重,禁用屬性文件中的hipdpi設置會有幫助,但您必須對hidpi屏幕進行任何縮放。

另一件可能有助於緩存字體的東西。我相信一個javafx移植的應用程序的最終結果更像是一個帶有熱點的大圖。滾動我認爲只是告訴應用程序每次重繪整個圖像。真的只是一個理論。緩存確實有幫助,但可以使您的文本看起來有些模糊。雖然我在縮放字體很大方面取得了一些成功,但將緩存設置爲true然後縮小,通常x2和.5會產生相當好的結果。使用em作爲字體也有助於模糊文本。

如果你需要顯示大量的文本,它必須滾動,你可能會得到更好的結果通過webview顯示它。我從來沒有真正使用過它,但我會想象它被移植到原生瀏覽器窗口時會被替換掉,所以我認爲性能應該很不錯。我猜可能他們在javafx中編寫了一個html渲染器,然後你會遇到同樣的陷阱。

http://www.gluonhq.com提供了一種稱爲魅力,羽絨和連接包,應該模仿原生應用程序。這聽起來很有希望,我目前正試圖獲得更多的信息,看看他們是否有解決這些類型的問題。如果我收到有關魅力的更多信息,我會添加到帖子中。

+0

我想評論一下,我不認爲這些問題與javafxports插件有關。我相信這些問題來自OpenJdk或javafx核心本身,並且在高性能臺式機上並不明顯。 Max OSX上的視網膜屏幕出現類似的問題 – Frank

+0

是否有緩存字體的全局設置?什麼是高dpi的參數。我想給它一個嘗試記錄差異 – javasuns

+0

我認爲這將是可能的使用查找功能,也許像(標籤)scene.lookup(「標籤」)然後循環它們並設置緩存 – Frank