[RÜCKMELDUNG FEHLT] Text und Bilder in View einbinden

bowser36

bowser36

Neues Mitglied
3
N'abend die Damen und Herren.
Ich würde gerne Textpassagen und Bilder in einer View platzieren. Es steht aber nicht von vornherein fest welche Texte und Bilder an welcher Stelle angezeigt werden. Das wir während des Lesens per Click ausgewählt. Ich habe bis jetzt aber so ziemlich überhaupt keinen Plan wie ich das am besten mache. Man soll an einer bestimmten Stelle im Text per Dialog-Fragment abgefragt werden, wie es weitergehen soll und anhand der Clickwahl soll eine neue Textpassage in die View geladen werden. Eventuell soll dann auch ein Bild dazu geladen werden. Ich hab es bis jetzt mit dem Einlesen einer html Datei probiert, was für den Text nicht schlecht ist, da ich den dann auch per Tags schon formatieren kann aber Bilder kann man ja leider nicht über den Inputstream einladen. Könntet ihr mir sagen wie man das am besten realisieren kann.

Eine weitere Frage wäre, wie die App automatisch Text auf die nächste Seite bricht, wenn das Ende der View erreicht ist. Es soll wie bei einem E-Book per Blättern auf die nächste Seite gewechselt werden.

thx b36
 
Soll das ein Spiel werden?
Das Problem ist leider nicht trivial. Vielleicht hilft Dir das für dein Bilder-Problem: Android - local image in webview.
Seitenumbruch: Erlaube einfach, das gescrollt werden kann. Bei den unterschiedlichen Displaygrößen mach alles andere kein Sinn

Du kannst Java Methoden aus dem Html mit Hilfe von JavaScript aufrufen: Building Web Apps in WebView | Android Developers
 
Es soll wie bei einem E-Book per Blättern auf die nächste Seite gewechselt werden.

Hierzu kannst du auch den Text als HTML formatieren, dann dir das Ganze in einen abgeleiteten WebView Laden
und in Diesem nur horizontales Scrollen zulassen.
Mit einem abgeleitetem WebViewClient dann nach dem vollständigen Laden das entsprechende JavaScript nachladen. (s.o.)

P.S.
N'abend die Damen und Herren.

Wenn mal hier ein paar Mädels dabei wären, würde dies das Thema erheblich auflockern :)
 
Zuletzt bearbeitet:
@swa00 Danke für die Zusammenfassung.
@bowser36 Wie man Bilder in ein WebView laden kann, steht im ersten Link.
 
Also es soll eine Buch-App werden, kein Spiel. Ich würde halt gerne das Look'n'Feel eines Buches erreichen, mit einem Pagecurl-Effekt beim Seitenwechsel.
Mal eine Frage zu den verschiedenen Views. Warum so viele verschiedene View Klassen. Warum nicht einfach eine Klasse die alles kann? Also Text, Images, html usw. Hat das was mit Performance und Dateigröße zu tun? Wenn das überhaupt in ein,zwei Sätzen zu beantworten ist.
 
Eher mit der Strukturierung von Code.
Jede Aufgabe hat normalerweise eine Klasse. So kann man etwas aus vorhanden Modulen zusammenbauen. Das ähnelt dem Bau eines Hauses. Es gibt Steine, Fenster, Türen usw.
Der Vorteil liegt auf der Hand, man kann Code wiederverwenden. Das spart Unmenge an Zeit. Und man muss nicht alles immer wieder programmieren.
Der andere Vorteil ist noch wichtiger, man Code benutzen, der funktioniert und schon 100 mal getestet wurde.

Und es fällt mir noch ein wichtiger Vorteil ein, der Code ist viel besser wartbar.
 
also es hat schon was mit verebungsstruktur zu tun? sagen wir mal: zuerst war textView da, dann kam imageView usw. ?
 
Ich würde halt gerne das Look'n'Feel eines Buches erreichen, mit einem Pagecurl-Effekt beim Seitenwechsel.

Das wird recht tricky , da ich es selbst schon einmal umgesetzt habe .

Nachdem Du so vorgegangen bist , wie oben von mir erklärt, musst du dann die Seiten erst in Bitmaps wandeln,
denn ohne Bitmap kannst du keinen CurlEffekt realisieren, diese Animation gibt es nicht von Haus aus.
(ARGB Vorraussetzung ,also Alpha channel, sonst fehlt der Effekt)


Dazu musst du bei vielen Büchern eine Umwandlung der originalen vornehmen , weil sie leider nicht immer passen
und ziemlich abenteuerlich aufgebaut sind ( es sei denn , du hast was Eigenes)

Auch nicht zu verachten ist das horizontale Scrollen, dies ist nicht immer exakt und bietet dir einen Versatz .

Und damit das Ganze auch flüssig läuft , solltest du ~ 5 Bitmaps (2 Seiten davor und dahinter, wie auch aktuelle im Cache
behalten.
Da aber bei einem Display mit guter Auflösung der interne Speicher nicht ausreicht , musst du sie auslagern .
und / oder mit LRUCache bearbeiten . Reduzieren bringt nichts , weil dann die Auflösung schwammig wird.

Dann hast du wieder das Problem , das es durch das Schreiben und Komprimieren zu zeitkritischen Verhalten kommt .
Dementsprechend muss alles mindestens in vier parallele Threads rein .

Ich hoffe, dass ich dir ein paar Tips geben konnte
 
a) Ich würde an deiner Stelle erst mal auf Pagecurl verzichten. Baue erst mal den Rest. Die Kür kommt als letzte.
Pagecurl - schau dir sonst das mal an:

GitHub - moritz-wundke/android-page-curl: Page Curl for Android
GitHub - harism/android_page_curl: An example application for creating page curl/flip effect on Android using OpenGL ES. (mit OpenGL)

b) Vererbung:

Es geht mir nicht um die Vererbung. Sondern um die Kapselung von Code. Du kapselst einfach deinen Code in Modulen, die Schnittstellen haben. Welche du dann aufrufen kannst.
Polymorphie, sprich Vererbung, Überladen, Überscheiben und dynamisches Binden, ist nur eine Folge der Kapselung. Und ergeben sich daraus, wie du mit den Schnittstellen umgehst. Oder anders gesagt Polymorphie ist nur ein Teilbereich der OOP.
 
Zuletzt bearbeitet:
Ich würde da auch den Pagecurl erstmal rauslassen und mich um wichtigere Sachen kümmern wie es zum Laufen bringen zum Beispiel. Auch den Text richtig darstellen mit Umbruch auf nächste Seite, spacing etc. bei verschiedenen Größen/Auflösungen ist an sich schon eine Mammutaufgabe. Hoffe du suchst dir da eine vorgefertigte API dafür heraus...


P.S. wegen dem Curl: Mach es dir einfach und benutze dafür ein simpel gehaltenes Spritesheet wie das hier : https://image.shutterstock.com/z/st...per-white-paper-sticker-element-392709997.jpg

Falls du es aufwendiger willst steht dir OpenGL zur Verfügung. Dem Akku des Benutzers wird das aber nicht besonders gefallen :(
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Kardroid
na gut, danke Jungs. der Wind ist aus den Segeln, das lass ich dann erstmal. aber bezüglich des horizontalen Scrollens, das kann man ja mit ViewPager hinkriegen, oder?
[doublepost=1490570311,1490565761][/doublepost]
Auch den Text richtig darstellen mit Umbruch auf nächste Seite, spacing etc. bei verschiedenen Größen/Auflösungen ist an sich schon eine Mammutaufgabe. Hoffe du suchst dir da eine vorgefertigte API dafür heraus...
Kennst Du zufällige eine API oder hast ein Stichwort, nach welcher API ich suchen soll?
 
.... das kann man ja mit ViewPager hinkriegen, oder?

Das kannst du natürlich tun, musst aber nachwievor deinen Text/Html in Seiten splitten

Und dabei kommst du um eine ordentliche (eigene) Berechnung nicht drumrum.
(Margins/Paddings,Schriftart,Schriftgrösse,Umbruch, Einrücken, Trennung,Absatz usw)

Oder halt die elegante Art : erst Text in Html und dann wieder wie unter #3 weiter

Und wenn du dann da angelangt bist, kommt die (Zitat Markus) - "Kür" und du kannst den Inhalt (Seiten)
grafisch aufbereiten und an deinen Curl effekt gehen (oder was auch immer)

P.S. Auch wenn du CurlEffekt schön findest , es ist allerdings antiquiert und stammt aus der prähistorischen Apple Zeit.
 
Zuletzt bearbeitet:
Ne Curl fliegt raus ;-) Ich bin jetzt so weit, dass ich Text und Bilder in einer HTML-Datei habe und die Formatierung über eine CSS-Datei mache. Funktioniert soweit ganz ordentlich. Hab nur ein bisschen Performance-Probleme. Das Anzeigen von Fragments und das Starten einer neuen Activity dauert gefühlt etwas lange. Muss man bei so einer kleinen Anwendung schon mit mehreren Threads arbeiten? Ich werde später mal den Code reinstellen.
 
  • Danke
Reaktionen: swa00
Also mir gefällt die Lösung von Jaiel mit dem simplen Sprites. Muss ich mir merken.
 
So, mit dem ViewPager funktioniert es jetzt auch. Ich möchte später anhand von bestimmten Tags in einer Methode auswählen welcher Text als nächste Seite geladen wird. Ich weiß nur nicht, wie und wo ich die Tags definieren soll. Ich hatte die Idee, sie einfach in den <head> der jeweiligen HTML Datei, evtl. als meta data zu speichern und sie dann mit irgendeiner Methode auszulesen. Bis jetzt hab ich aber nichts wirklich gefunden, um die Daten auszulesen. Auch bin ich mir nicht so sicher, ob ich x-beliebige Sachen (Tags) in die meta data schreiben darf. Oder wäre es schlauer, die html Files bzw. deren Tags vorher in einem permanent gespeicherten Objekt, was auch beim schließen der App bestehen bleibt, abzulegen? Oder in einem xml-File?
Die gespeicherten Daten/Tags sind nur ein paar Keywords, die die besagte Methode nutzen soll um zu vergleichen und zu entscheiden. Ich könnte mir vorstellen, dass es auch einfacher ist mit einem Objekt zu arbeiten als erst html- oder xml-Datei auslesen und dann die Daten zu verarbeiten. Ich will nämlich auch noch zur Laufzeit weitere Tags speichern (z.B. dass ein bestimmter Text schon genutzt wurde und die aktuelle Leseposition).
Sind die Shared Preferences für sowas zu gebrauchen?
 
Hallo bowser36,

a) jetzt kommst du an den Punkt , den ich auch oben beschrieben habe und du teilweise JavaScript
implementieren (coden) musst.

b) Du kannst SharedPreference benutzen um Flags abzuschreiben . Wenn du allerdings ASCII Passagen
speichern möchtest, ist SQLite von Vorteil
 
Zuletzt bearbeitet:
a) Mit JavaScript die Tags auslesen aus den HTML Dateien? Oder was meinst Du?
b) Also die SharedPreferences würde ich also für die Lesezeichen Nutzen und um evtl. die Tags der Textdateien zu speichern (die angeben welche Texte schon genutzt wurden) aber keine ganzen Texte.
 
Ich gehe davon aus , dass du ein HTML mit mehreren Seiten hast ,

Willst du tags definieren , dann KÖNNTEST du mit "#" arbeiten.
Bsp 4711.html#seite_3.

Dies funktioniert allerdings mit dem Standard Webview NICHT immer zuverlässig.


Deshalb nochmal an dieser Stelle - und ein wenig habe ich das Gefühl , das ich mich zum Dritten male
wiederhole :) (Erfahrung aus der Praxis)

EINE komplette html (OHNE TAGS) , dann in Seiten splitten ( je nach Schriftart und View Grösse), und
dann die Seiten nachladen.
Und dazu muss du eine Javascript Implementation vornehmen ( Injektion)

Dies ist der einzige praktikable Weg .......
 
EINE komplette html (OHNE TAGS) , dann in Seiten splitten ( je nach Schriftart und View Grösse), und
dann die Seiten nachladen.
Und dazu muss du eine Javascript Implementation vornehmen ( Injektion)

Sorry, stehe leider etwas auf dem Schlauch. Verstehe nicht ganz wie Du das meinst: "komplette html in Seiten splitten". Den kompletten Text in eine html und dann wie splitten?

Nur nochmal kurz zur Info, nicht dass wir uns falsch verstehen. Der Text hat halt verschiedene Passagen, die auch in unterschiedlicher Reihenfolge in der View angezeigt werden könnten.

Btw. kann man sowas wie @Media queries in einem WebView auch nutzen? Damit könnte ich doch dann diesen ganzen ScreenSizeSchmarn bedienen?
 
Der Text hat halt verschiedene Passagen, die auch in unterschiedlicher Reihenfolge in der View angezeigt werden könnten.

Dies lese ich aber jetzt zum ersten Male :)

Ich bezweifle sehr stark, dass du das einwandfrei zum Laufen bekommst.
Der WebView ist kein vollständiger Browser, sondern eher dahingehend rudimentär.

Dieses hin und herspringen der Textpassagen würde ich dann gleich von vorne herein in
einzelne htmls erstellen , dann benötigst du doch keine Tags und müsstest jetzt nicht rätseln , wie
du dort hingelangst.

Im Prinzip hast du ein html/css Erstellungsproblem.

Damit könnte ich doch dann diesen ganzen ScreenSizeSchmarn bedienen?
Du kannst auch hierzu schein , ob du das Ganze mit JQuery - Mobile umsetzen kannst.
Dazu musst dir halt eine virtuelle lokale Webseite erstellen und dann mit WebView laden
 

Ähnliche Themen

H
Antworten
2
Aufrufe
1.282
Hcman
H
H
Antworten
4
Aufrufe
600
HTCUserRay
H
B
Antworten
6
Aufrufe
1.016
jogimuc
J
Zurück
Oben Unten