Devo mostrare il contenuto del mio webview su uno sfondo genitore. C'è un modo semplice per farlo?Sfondo trasparente nella WebView in JavaFX
risposta
È possibile Chroma Key la visualizzazione Web sui contenuti utilizzando gli effetti Blend.
Aggiornamento
ho provato questo fuori e l'attuazione di un vero Chroma Key con gli effetti di fusione built-in di JavaFX 2.2 in JavaFX è in realtà piuttosto difficile (e superato le mie capacità di attuazione). Sono riuscito a far funzionare la tecnica con i formati video flv con pre-chroma, ma non con nodi arbitrari come WebView.
Ancora, per ora, è possibile ottenere qualcosa di simile in un modo semplice usando gli effetti di scurire e schiarire come suggerisce il martini nella sua risposta. Non è perfetto, ma probabilmente dovrà essere sufficiente fino all'implementazione di RT-25004 o la piattaforma JavaFX fornisca un insieme più completo di operazioni di compositing alfa.
Se u avere uno sfondo luminoso utilizzare
webView.setBlendMode(BlendMode.DARKEN);
e quando sfondo scuro, poi
webView.setBlendMode(BlendMode.LIGHTEN);
Questo sarà probabilmente essere risolto in un certo tempo, questa funzione è richiesto sul JavaFX bug tracker #RT-25004
Sto resuscitando questo perché ho trovato una soluzione migliore per il problema di avere un WebView
su un gradiente t. Supponiamo di avere un gradient like this e si desidera visualizzare una stringa HTML sopra in colore bianco che sembra qualcosa di simile:
<p>Integer semper, est imperdiet mattis porttitor, massa vulputate ipsum</p>
Il trucco è quello di convertire il gradiente a stringa Base64:
iVBORw0KGgoAAAANSUhEUgAAAAEAAAHDCAYAAADlQnCCAAAAq0lEQVRIib2VwRWAMAhDaSdwCtd1No8uUzzp0ydBgjwvnmhCPrTKtKxbb73NXcaQLiL5j/olyhQH5JXu4H4sUGyWHAIa9VWjU9qtyAh6JGicIMJno2HcGSX3gJsCKH5EfUfHJUed+qFzekrpuVzM/oq4uFKGr/pI4B7wiP2Vgno0F/uCUQ9ZXWg4vM/JL1Hpt10Nt+hZjhCDKepxV8H3soZGWOqHP3ZSGYDdATTkg3iGU3JnAAAAAElFTkSuQmCC
Poiché WebView
carica qualsiasi stringa HTML, questo può coinvolgere lo <body>
con uno sfondo. Nel mio caso, lo WebView
non occupava tutto lo spazio con il gradiente, quindi ho dovuto posizionare anche lo sfondo. Di seguito è riportato il codice HTML ho aggiunto alla stringa HTML sopra al beggining:
<html>
<head>
</head>
<body style="margin: 0px; padding: 0px; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAHDCAYAAADlQnCCAAAAq0lEQVRIib2VwRWAMAhDaSdwCtd1No8uUzzp0ydBgjwvnmhCPrTKtKxbb73NXcaQLiL5j/olyhQH5JXu4H4sUGyWHAIa9VWjU9qtyAh6JGicIMJno2HcGSX3gJsCKH5EfUfHJUed+qFzekrpuVzM/oq4uFKGr/pI4B7wiP2Vgno0F/uCUQ9ZXWg4vM/JL1Hpt10Nt+hZjhCDKepxV8H3soZGWOqHP3ZSGYDdATTkg3iGU3JnAAAAAElFTkSuQmCC); background-repeat: repeat-x; background-position: 0 -152px;">
<span style="font-family: Arial; font-size: 12px; color: white; display: block; margin:0px;">
E alla fine:
</span></body></html>
Pertanto la produzione di tale codice:
String desc = "<html><head></head><body style=\"margin: 0px; padding: 0px; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAHDCAYAAADlQnCCAAAAq0lEQVRIib2VwRWAMAhDaSdwCtd1No8uUzzp0ydBgjwvnmhCPrTKtKxbb73NXcaQLiL5j/olyhQH5JXu4H4sUGyWHAIa9VWjU9qtyAh6JGicIMJno2HcGSX3gJsCKH5EfUfHJUed+qFzekrpuVzM/oq4uFKGr/pI4B7wiP2Vgno0F/uCUQ9ZXWg4vM/JL1Hpt10Nt+hZjhCDKepxV8H3soZGWOqHP3ZSGYDdATTkg3iGU3JnAAAAAElFTkSuQmCC); background-repeat: repeat-x; background-position: 0 -152px;\"><span style=\"font-family: Arial; font-size: 12px; color: white; display: block; margin:0px;\">" + description + "</span></body></html>";
wv_desc.getEngine().loadContent(desc);
Si potrebbe forse mettere gli stili nel <head>
o li caricherò in un altro modo per chiarezza, suppongo, ma questo è un modo migliore di aggirare qualcos'altro che ho trovato in rete per questo problema.
Webview trasparente ottengo una buona soluzione qui: https://javafx-jira.kenai.com/browse/RT-29186 leggere i commenti Harry Hur
import java.lang.reflect.Field;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import org.w3c.dom.Document; `
public class TestTranparentApps extends Application {
@Override
public void start(Stage primaryStage) {
new WebPage(primaryStage);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
class WebPage{
WebView webview;
WebEngine webengine;
public WebPage(Stage mainstage){
webview = new WebView();
webengine = webview.getEngine();
Scene scene = new Scene(webview);
scene.setFill(null);
mainstage.setScene(scene);
mainstage.initStyle(StageStyle.TRANSPARENT);
mainstage.setWidth(700);
mainstage.setHeight(100);
webengine.documentProperty().addListener(new DocListener());
webengine.loadContent("<body style='background : rgba(0,0,0,0);font-size: 70px;text-align:center;'>Test Transparent</body>");
}
class DocListener implements ChangeListener<Document>{
@Override
public void changed(ObservableValue<? extends Document> observable, Document oldValue, Document newValue) {
try {
// Use reflection to retrieve the WebEngine's private 'page' field.
Field f = webengine.getClass().getDeclaredField("page");
f.setAccessible(true);
com.sun.webkit.WebPage page = (com.sun.webkit.WebPage) f.get(webengine);
page.setBackgroundColor((new java.awt.Color(0, 0, 0, 0)).getRGB());
} catch (Exception e) {
}
}
}
}
}
È davvero fantastico! –
'WebEngine.page' è definitivo, quindi è possibile eseguire la riflessione senza la necessità di ascoltare le modifiche del documento direttamente durante la creazione di WebView. Sebbene la mia versione (JDK 1.7.80) usi 'com.sun.webpane.platform', ma probabilmente è la stessa. – TWiStErRob
Questo potrebbe essere utile
final com.sun.webkit.WebPage webPage = com.sun.javafx.webkit.Accessor.getPageFor(engine);
webPage.setBackgroundColor(0);
perfetto. per rendere trasparente WebView basta solo due righe di codice. oppure puoi renderlo un liner 'com.sun.javafx.webkit.Accessor.getPageFor (webviewgetEngine()). setBackgroundColor (0)' – Vishrant
- 1. Rimuovere ScrollBar nella WebView Javafx
- 2. cacao: Come rendere trasparente lo sfondo webView?
- 3. Sfondo trasparente per WKWebView
- 4. Caching in JavaFX WebView
- 5. Come creare una schermata Splash con sfondo trasparente in JavaFX
- 6. html sfondo trasparente
- 7. Sfondo trasparente WKWebView (NSView)
- 8. Sfondo trasparente
- 9. Carattere trasparente su sfondo trasparente
- 10. Colore sfondo Android WebView
- 11. Autodetect delega - JavaFX - WebView
- 12. PreferenceFragment con sfondo trasparente?
- 13. UIWebView Sfondo trasparente in ios8
- 14. Sfondo trasparente in immagine JPEG
- 15. WebView trasparente non funziona su Android v4.0
- 16. Java Graphics2D sfondo trasparente
- 17. Sfondo trasparente Iframe
- 18. Sfondo trasparente JFrame
- 19. Web sfondo trasparente SVG
- 20. AChartEngine sfondo trasparente
- 21. PHP/GD - sfondo trasparente
- 22. Attività con sfondo trasparente
- 23. Pulsante sfondo come trasparente
- 24. Google Adsense sfondo trasparente
- 25. Debug HTML/Javascript in JavaFX WebView
- 26. Come ottenereSelectedText da webView in javaFX
- 27. Versione di WebKit in JavaFX 8 WebView
- 28. Rilevamento evento HTML onareaup in JavaFX WebView
- 29. Apertura WebView sullo sfondo
- 30. Sfondo personalizzato/sfondo trasparente su UIBarButtonItem?
Si lavora per me con JDK 8 (1.8.0_40-bis), ma non con JDK 7 (1.7.0_65) –