Bild bewegen im FrameLayout/Layout bereich?

  • Antworten:19
Michele
  • Forum-Beiträge: 1.525

17.03.2013, 16:08:32 via Website

Hallo alle zusammen,

ich möchte gerne was Testen und natürlich dazu lernen.
Weiß nur nicht wo und mit was ich anfangen soll.

Würde z.B gerne einen Stern.png oder irgendwas an .png in meinem Layout oder FrameLayout bewegen.
Einfach nur nach oben oder nach unten bisschen, wenn ich z.B den Button anklicke.

Was muss ich dafür alles wissen an Methoden oder sonstiges was das bewegen angeht.
Keine sorgen den Button kenn ich *grins*


LG

Antworten
impjor
  • Forum-Beiträge: 1.793

17.03.2013, 16:14:02 via App

Bewegen im Sinne, dass das Bild über den Bildschirm läuft -> Animation.

Oder soll es quasi verschwinden und sofort wieder wo anderes auftauchten? -> layoutparams

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Michele
  • Forum-Beiträge: 1.525

17.03.2013, 16:15:28 via Website

Sagen wir mal es ist ein ImageView Bild im Layout.

Ein Stern. Der soll einfach nach einem Klick auf dem Button wo anders auf dem Bildschirm sein =)

Was ganz einfaches. Damit ich das verstehe.


LG

— geändert am 17.03.2013, 16:18:44

Antworten
impjor
  • Forum-Beiträge: 1.793

17.03.2013, 16:22:48 via Website

Achso.

Wie gesagt, ich nehme mal an, du weißt wie du bestimmten Code ausführst, wenn du einen Button klickst.
Dann kannst du einfach via
1LayoutParams params = deineView.getLayoutParams();
sog. LayoutParams bekommen. Die veränderst du dann und setzt sie wieder über
1deineView.setLayoutParams(params);
Verändert werden müssen die x/y-Werte.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Michele
  • Forum-Beiträge: 1.525

17.03.2013, 16:45:20 via Website

Danke dir.

Und mit dem x/y Werten hatte ich immer probleme was Programmieren/Rechnen/Mathe angeht *lach*

Deswegen brauche ich hilfe.

EDIT: Hinbekommen habe ich es soweit. Aber leider nicht mit dem x/y.

1LayoutParams params = stern.getLayoutParams();
2 stern.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));


LG

— geändert am 17.03.2013, 16:47:29

Antworten
impjor
  • Forum-Beiträge: 1.793

17.03.2013, 17:01:30 via App

Sorry, die entsprechenden Felder heißeh leftMargin, topMargin
1LayoutParams params = stern.getLayoutParams();
2stern.leftMargin += 10; // Bewegung um 10 Pixel nach links.
3stern.
4 stern.setLayoutparams(params);

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
impjor
  • Forum-Beiträge: 1.793

17.03.2013, 17:05:23 via App

PS: Beachte aber, die Verschiebung ist um Pixel, für cm etc. solltest du das umrechnen, da die Pixeldichte (dpi) nicht überall gleich ist.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Michele
  • Forum-Beiträge: 1.525

17.03.2013, 17:10:01 via Website

Danke dir nochmal.

Magst mir mal sagen woher du das liest oder lernst?

Weil irgendwie klappt das nicht.

stern.leftMargin += 10; geht z.B schonmal garnicht.


LG

Antworten
impjor
  • Forum-Beiträge: 1.793

17.03.2013, 17:47:54 via App

Nochmals sorry, muss natürlich heißen params.leftMargin += 10;

Meine Tipps:
d.android.com ( dort ist alles aufgelistet)
Google :D
Uwe Post's Buch Android apps entwickeln.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Michele
  • Forum-Beiträge: 1.525

17.03.2013, 18:39:45 via Website

Also.

Hast dich auch wohl verlesen =)

params.leftMargin += 10; geht noch immer nicht =)
Wenn dann params.height += 10 usw =)

Und das ändert die größe des ImageView.
Aber ich möchte ja es nur versetzen auf einen anderen platz.

Und das Buch von Uwe Post habe ich hier.
Aber finde es sehr schlecht.



LG

— geändert am 17.03.2013, 18:40:56

Antworten
impjor
  • Forum-Beiträge: 1.793

17.03.2013, 22:26:34 via App

Hmmm... seltsam.... sollte eigentlich funktionieren.
Versuch mal statt LayoutParams immer MarginLayoutParams. Das sollte eigentlich automatisch geschehen.
Das Problem bei LayoutParams ist, das sogut wie jede View eine eigene Version besitzt.

Gruß
PS: Scheinbar bin ich der einzige, der Uwes Buch empfehlen kann :grin:

— geändert am 17.03.2013, 22:27:03

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Michele
  • Forum-Beiträge: 1.525

17.03.2013, 23:23:48 via Website

Naja egal. Ich verstehe das leider noch nicht so ganz.
Kann mir auch nicht vorstellen das die paar sachen schon sowas erzwingen.
Etwa vergesse ich was oder keine ahnung *gins*

Werde das erstmal lassen.
Trotzdem danke dir sehr.

LG

Antworten
impjor
  • Forum-Beiträge: 1.793

18.03.2013, 13:57:51 via App

Ich denke auch, das dieses Projekt dir nicht so viel bringt. Ich habe das z.B. noch nie gebraucht (außer für das Buch halt).

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

18.03.2013, 14:54:38 via Website

Habe jetzt auch keine Lösung, aber wenn Du ein Widget in ein Layout mit "Geometriemanager" (LinearLayout z.B.) setzt, schafft Du es ja nicht nur ein Widget zu verschieben. Die Elemente stehen ja alle miteinander in Beziehung.
Ev. geht es mit ....LeftMarin -= 10; .....RightMarin +=10 so was wie Verschiebung zu erreichen,
danke aber Du brauchst letztendlich ein AbsoluteLayout um darin eine Position absolut zu setzen.

Antworten
Michele
  • Forum-Beiträge: 1.525

18.03.2013, 15:44:37 via Website

Also FrameLayout ist schon richtig.

Wollte halt nur mal wissen wie sowas geht =)
Aber ist ja nicht schlimm =) Man kann ja nicht alles wissen.


LG

— geändert am 18.03.2013, 15:44:44

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

18.03.2013, 16:23:03 via Website

Sorry, ihr habt natürlich recht.
Hatte den Titel nicht richtig gelesen. Dort steht ja schon FrameLayout und nicht LinearLayout mit dem es ja nicht geht.

Antworten
Michele
  • Forum-Beiträge: 1.525

19.03.2013, 01:51:01 via Website

Habe es nun soweit hinbekommen.

Dachte du liest Uwes Buch :grin: Dann müsstest du ja wissen eigendlich wie
sowas geht :grin:


1massstab = getResources().getDisplayMetrics().density;
2spielebereich = (FrameLayout)findViewById(R.id.bereich);
3breite = 315;
4hoehe = 140;
5kopf = new ImageView(this);
6kopf.setImageResource(R.drawable.kopf);
7kopfB = (int) Math.round(massstab * 142);
8kopfH = (int) Math.round(massstab * 275);
9params = new FrameLayout.LayoutParams(kopfB, kopfH);
10params.leftMargin = breite;
11params.topMargin = hoehe;
12spielebereich.addView(kopf,params);


LG

Antworten