Hi, zeige mal das gesamte build.gradle. Was steht bei compileSdkVersion 26?
Beiträge von nono124
-
-
Mich würde mal interessieren welche Programmiererfahrung er hat. Denn wenn er zu wenig hat und sich erst alles mühselig erarbeiten muss. Bringt die Zeit Planung wenig.
Wenn er vom Donnerstag bis Sonntag noch nicht einen Spinner lauffähig erstellt hat, denke ich das er noch Anfänger ist und da ist eine Zeiteinschätzung sehr schwer. Denn er muss immer wieder nebenbei lernen und Recherchieren das kostet Zeit die nicht Einschätzbar ist.
Wieviel Zeit hat er denn ich meine hat er den ganzen Tag Zeit oder ist er noch anderweitige Beruf Schule Studium beschäftigt. Dann ist meist nicht viel Freizeit.
Planungen zu erstellen wo man Geschultes Fachpersonal zB. Handwerks Firmen hat ist meiner Meinung etwas leichter als wenn man das eigene können einschätzen soll.
lg Jörg
-
Hi,
lade mal meine Variante hoch.
Da es nicht geht ,zumindest nicht bei mir, in ein unter Layout wie playField in der Bubbel Klasse zu zeichnen. Habe ich das gesamte Layout benutz und gebe der Bubbel Klasse auch noch das playfeld Layout mit. Dies dient nur dazu um die Breite Höhe Oben Unten zu bestimmen.
Diese Werte benutze ich in der Bubbel Kasse zum Begrenzen und Abprallen von der Wand.
Die Text Zeilen Oben und unten sind in dem MainLayout und werden Sichtbar und Unsichtbar gemacht.Warum man in das Sub Layout "playFeld" in der Bubbel Kalasse nicht zeichen kann verstehe ich auch nicht ganz. Denke das da nur eine Copy also Call by Value und bei dem gesamt Layout wird die Ref. übergeben.
Wenn ich nun in eine Copy zeiche sehe ich nichts. Ist eigentlich klar. Wenn es so ist.
Berichtigt mich wenn ich Falsch liege.so nun viel Spas beim testen.
Jörg -
-
wenn du ein anderes oder neues Projekt lädst auch?
mit Alt+F geht das File Menue auf
Edit Alt+E
View Alt+V
N
C
Z
R
B
U
T
S
W
H
wenn es mit neuen Projekt geht füge dein Projekt neu Hinzu -
sind unter den Beschriebenen Pfad die menus da?
-
Settings ist STR+Alt+S dort Appearance& Behavior/
Menue and Toolbars/Main menue
klicke mal auf Restore All Defaults -
Hi, meinst du die Leiste in Android Studio? Dücke mal Umschalt+F12
-
Zitat
Warum ist dem nicht so?
Dann scheint dieser Punkt in dem Buch falsch zu sein, denn so wie es im Code (z.b. unter newGame) steht, steht es im Buch.Bzw. steht da genau ViewGroup container = (ViewGroup)findViewById(R.id.container) und bei mir container = findViewById(R.id.container);
Ich habe nicht gesagt das das falsch ist.
Nur das dies nichts mit den eigentlichen Fragmenten in Android zu tun hat.Auch der Code ist richtig nur ist es eben so das SubLayouts nicht an andere Klassen übergeben werden können. Da es in Java keine pointer gibt wie in C.
Der Ausdruck Fragment und Container ist in dem Buch wahrscheinlich etwas ungünstig gewählt worden. Schaft somit etwas verwirrungt.
-
Der Debugger ist bei so etwassen sehr hilfreich.
Hast du vor diesem Buch dich auch schon mit android programmierung beschäftigt? -
Fragmente ist eine etwas andere Technik.
Mainactivity erbt von "FragmentActivity". Das Main Layout stellt ein Layout als Container bereit.
Für jedes Fragment gibt es eine eigene Klasse. Diese erbt von "Fragment" in ihr wird ein Layout geladen.
Der Start eines Fragment wird über einen Fragmentmanager und einer Transaktion gemacht. Die Fragment Klasse läuft sozusagen in der Activity. Auch der Lifecycle ist anders. Du sieht Fragmente ist eine andere Technik als deine.
Das was du machst würde ich als Pseudo Fragment bezeichnen.Warum die erste Bubbel unter den Text ist kann ich jetzt auch nicht sagen.
-
Welche layout ref übergibst du momentan an die bubbel klasse?
Bei mir ist es so das wenn ich eine ref aus dem zur Laufzeit geladenen layout übergebe geht es nicht. Warum habe ich oben schon geschrieben.Nein was du bis jetzt machst sind keine Fragmente.
Wie gesagt erstelle dir platzhalter Layouts im main layout, somit kannst du auch die Koordinaten deines Layouts in der bubbel Klasse abfragen. Oder du musst die Koordinaten deines spielfeldes auch übergeben damit du in der bubbel klasse weist wo deine wand ist ..
Wenn die erste blasse unter dem Text ist dann bist du von den mir geschickten Code abgewichen. Das was zuerst gezeichnet wird ist unten.
Zum Abprallen must du immer die x und y Koordinaten der bubbel prüfen ob sie nicht der Wand sind und dann die Richtung umkehren.
Versuch sowas erst mal an einen einfachen Beispiel mit einen Objekt in einen normalen erstelltten Layout. Ohne alles nur das sich bewegende View auf dem Bildschirm. Villeicht unten ein Start Button.Verstehst du eigentlich die Bewegung Animation wie die zu stande kommt?
Schreibe dir dafür eine neue App
-
Hi, Leider geht es so auch nicht.
In der Bubbel Klasse hast du keinen Zugrif auf das playField Layout.
Das liegt daran das Java kein "Call by Reference" macht sondern nur "Call byValue".
Somit hast du in der Bubbel Klasse nicht die Reverenz auf das Layout. (sondern nur eine Copy)
Das es mit dem Container Layout geht liegt daran das dies in der onCreate erstellt wird.Da bekommst du auch die xu Y Kordinaten mit getWidth(); getHeight()
bei dem PlayField Layout ist x u y immer 0;Bin leider auch nicht gleich drauf gekommen da ich von C zu Java gekommen bin, und dort gibt es Pointer also "Call By Ref."
Möglichkeit wäre in dem Laout Activity_main.XML oben und unten Layouts (mit ID) als Platzhalter einzufügen. in diese deine Button, TextViews zu laden. Dann Kannst du die Spielfeld Ref an die Bubbel Kalasse übergeben.
Oder du baust die App um auf Fragmente.
Unter anderen wurden Fragmente auch für diesen Zweg entwickelt.Ps. In der Main musst du in der Methode "onBurst" den aufruf der Bubbel Klasse auch anpassen.
-
Schön das wir helfen konnten und du es uns noch mitgeteilt hast.
-
nein du sollst die Zeile nicht in der InitRound ändern das ist richtig so wie es war. Da werden alle Bubbel im Speilfeld gelöscht.
Du solltest das in der "newGame" ändern denn da werden deine Bubbels erzeugt. Besser gesagt da wird deine Bubbel Klasse aufgerufen.Was ich schlecht finde, und du warscheinlich durcheinander kommst ist. Das es einmal eine globale Variable container gibt ( für das gesamte Layout), und in der "initRound" du eine lokale Variable mit dem selben Nahmen hast die aber nichts mider globalen zu tuhen hat.
Zeile 124 in initRound
ViewGroup container = findViewById(R.id.playField);
container.removeAllViews();Damit sollen alle Bubbel in deinen Spielfeld gelöscht werden und nicht wieder neue erstellt werden.
Diese neuen werden nähmlich richtig angezeigt und die anderen nicht.neue erstellen in der newGgame.
-
Hallo, so jetzt kommt etwas Licht in's Dunkle.
Habe mir zwar den Quellcode noch nicht kommplet angesehen. Aber mir fällt schon was auf.
Versuche mal zu erklären.In deiner Main in der onCreate lädst du das activity_main.xlm "setContentView(R.layout.activity_main);"
dies ist ein lehres Framelayout ohne irgendeinen Inhalt was den gesammten Bildschirm einnimmt.
Im weiteren Verlauf in der onResume wird die showMenuFragment() methode aufgerufen.
In dieser wird als estes alle Ellemente in Container Layout "activity_main.xll" gelöscht ,dann wird das "game_layout.xml" layout in das Container Layout geladen. Dannach werden deine Button mit dem Onklicklistner verknüpft.Wenn du nun auf den Start Button Klickst wird die Methode newGame aufgerufen.
Dort wird wieder als erstes alle Ellemente im ContainerLayout gelöscht. Danach wieder das "activity_main.xml" Layout geladen.
Danach deine Bubbel Klasse aufgerufen."bubbles.add(new Bubble((FrameLayout)container, scale(V_MAX), scale(SIZE_MAX), rnd, bubbleDrawable, this));"
Dort wird als Speilfeld die Ref. des ContainerLayout Übergeben. Also der gesamte Bildschirm. Der Programiere aus dem Buch wollte das wohl so.
du müsstest aber die Ref. von deinen Spielfelf übergeben.ViewGroup playFeld = findViewById(R.id.playField);
bubbles.add(new Bubble((FrameLayout)playFeld, scale(V_MAX), scale(SIZE_MAX), rnd, bubbleDrawable, this));Das Abprallen von der Wand mußt du natürlich noch schreiben.
So das sollte es fürs erste mal gewesen sein.
Wass sind noch so für Apps in den Buch? Habe das auch mal gesehen im Handel.
-
dann zeige mal den Rest des Programms. oder schicke mir das Projekt als ZIP
Wenn das ein Buch ist vielleicht für Spiele app Erstellung. Wird die app doch auch erklärt und die Bedeutung der Klassen Methoden.
Da müsstest du doch wissen welche Methode für was ist . -
Hast du die neu Art der premission eingebaut?
Kommt in der app die Abfrage nach der Berechtigungaddresses = geocoder.getFromLocation(lat,lng,1);
String address = addresses.get(0).getAddressLine(0);Prüfe ob addresses nicht lehr ist. Du erstellst die Variable Liste und willst gleich was raus holen. IndexOutOfBoundsException: Invalid index 0, size is 0.
Heißt das eine Liste Feld bei index 0 lehr ist.Wenn in geocoder.getFromLocation(lat,lng,1) keine Daten sind spricht es wieder für die Premission.
Was mir auch gerade auffällt ist das du alles in der oncreat machst. Zu dem Zeitpunkt läuft die app noch gar nicht richtig .
Führe den try teil mal in onresume oder in einen clicklistner aus.Zeige mal wie du das mit den premission gelöst hast.
-
Ja der Code ist hauptsächlich für die Größe der Bubbelss.
Würde aber auch sagen das die Bubbel auch bewegt werden über das Margin.Da sich aber alles auf den Container (welcher match_parent ist) bezieht, ist ja klar, dass alles "hinter" dem Spielfeld und "unter" den ganzen TextViews verläuft.
Oder Denkfehler?
kann ich dir nicht sagen dazu müsste ich die bubbel bewegungs Methode sehen.Ich müsste jetzt ja (irgendwie) angeben, dass nicht der "Container" das Spielfeld ist, sondern mein "playfield".
Das müsste so sein du sagst das in der Main die ref von playfield an Container übergeben wird.
Wie ist das die bubbes bewegen sich und verändern die Größe.
Erkläre mal das Spiel. -
Wie gesagt wenn dein layout match_parent ist geht es nicht da nimmt er den gesamten Bildschirm an.
Zeige mal dein XML.- x = rnd.nextFloat() * (container.getWidth()-size);
- y = rnd.nextFloat() * (container.getHeight()-size); Stimmt das so ? Das du so die Layout grösse bekommst.
Glaube du hast da schon einiges geändert als wie im Buch