JavaFX ScrollPane на Android - слишком медленно
Я только что написал простой пример использования панели прокрутки в JavaFX. Только одна ScrollPane, помещенная в сцену, и ScrollPane содержит компонент Label с большим текстом. Используя gradle, я загрузил приложение на Android-устройство Nexus 4. Как видно из загруженного мною видео, прокрутка идет слишком медленно. Я уверен, что другие испытали это. Любое предложение о том, как это можно изменить на собственную скоростную прокрутку, очень ценится.
Исходный код приложения можно скачать здесь.
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>
1 ответ
Столкнулся с похожими проблемами. Проблема усугубляется на устройствах hidpi, отключение параметра hipdpi в файле свойств помогает, но вам придется выполнить любое масштабирование для экранов hidpi.
Еще одна вещь, которая может помочь, - это кэширование шрифтов. Я считаю, что конечный результат переносимого приложения javafx больше похож на большое изображение с горячими точками. Прокрутка, я думаю, это просто указание приложению перерисовывать все изображение каждый раз. Просто теория действительно. Кэширование помогает, но может сделать ваш текст нечетким. Хотя у меня был некоторый успех в масштабировании шрифта, установив кэш в true и затем уменьшив его, обычно x2 и.5 дают довольно хорошие результаты. Использование em для шрифтов также помогает нечеткому тексту.
Если вам нужно показать огромное количество текста и его необходимо прокрутить, вы, вероятно, получите гораздо лучшие результаты, если отобразить его через веб-просмотр. Честно говоря, я никогда не использовал его, но я полагаю, что он заменяется при переносе в собственное окно браузера, поэтому я думаю, что производительность должна быть довольно хорошей. Я думаю, возможно, что они написали HTML рендер в javafx, и тогда вы столкнетесь с теми же ловушками.
http://www.gluonhq.com/ предлагает то, что называется пакетом charm, down и connect, который должен имитировать нативные приложения. Это звучит многообещающе, и в настоящее время я пытаюсь получить больше информации, чтобы увидеть, есть ли у них решения для этих типов проблем. Я добавлю к сообщению, если я получу больше информации о шарме.