#java #javafx #transformation #scrollpane #panning
#java #javafx #преобразование #область прокрутки #панорамирование
Вопрос:
У меня есть область прокрутки с включенной возможностью панорамирования. При панорамировании с большим изображением преобразование «отстает» от мыши, что приводит к «блочному» преобразованию. Есть ли способ это исправить? Здесь не так много кода, который действительно уместен для публикации, если вам нужна дополнительная информация, просто спросите.
Комментарии:
1. Почти всегда полезно включить фрагмент кода, который демонстрирует проблему.
Ответ №1:
Я понимаю, что это старый пост, но другим может понадобиться помощь в этой области. Что я сделал, чтобы решить эту проблему, так это создать Transition
объект и в функции interpolate установить значение vValue или hValue области прокрутки, равное самому себе плюс 0,001, в зависимости от того, как быстро вы хотите панорамировать. vValue и hValue — это места просмотра на области прокрутки, поэтому, по сути, вы просто медленно увеличиваете то, что просматриваете, так что это похоже на панорамирование, но это не так. Вот пример из проекта, над которым я работаю, где вы можете «панорамировать» вниз или вверх с помощью ключевых событий.
@FXML
ScrollPane scroll;
private Transition down;
private Transition up;
public void initialize(){
this.down = new Transition() {
{
setCycleDuration(Duration.INDEFINITE);
}
@Override
protected void interpolate(double v) {
scroll.setVvalue(scroll.getVvalue() 0.001);
}
};
this.up = new Transition() {
{
setCycleDuration(Duration.INDEFINITE);
}
@Override
protected void interpolate(double v) {
scroll.setVvalue(scroll.getVvalue()-0.001);
}
};
}
@FXML
private void handleKeyPress(KeyEvent event){
if(event.getCode() == KeyCode.S){
down.play();
}
if(event.getCode() == KeyCode.W){
up.play();
}
}
@FXML
private void handleKeyRelease(){
this.down.stop();
this.up.stop();
}