ImageView LayoutMargins ändern Problem

  • Antworten:7
Aron Brast
  • Forum-Beiträge: 92

07.09.2014, 11:45:55 via Website

Ich habe ein Problem mit dem setzten der LayoutMargins einer App, eine Methode wird ausgeführt, wenn ich einen Button betätige, jedoch wenn ich den Button betätige passiert lange nichts und dann taucht eine Meldung auf, in der steht, dass die App nicht mehr reagiert und ich kann zwischen warten und beenden wählen.

Hier der Code der Mehode die ich verwende:

   ImageView imageView = (ImageView) findViewById(R.id.imageView3);
   RelativeLayout.LayoutParams rm = 
            new RelativeLayout.LayoutParams
            (RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    while(zahl < 100) {

    rm.setMargins(left, top, right, bottom);
    imageView.setLayoutParams(rm);
    right ++;
    }

Danke schonmal im vorraus :)

— geändert am 07.09.2014, 11:46:14

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.09.2014, 12:29:47 via Website

Wie isch sehe soll die while schleife wohl das Bild verschieben.
Das funktioniert aber nicht, da der Mainthread durch die Schleife zu sehr belasetet wird.
Vlt musst du die schleife in einen anderen Thread aulagern und dann die schleife laufen lassen.
Zudem ist es viel zu schnell.
Wenn man die bewegung sehen soll, dann muss da noch ein Wartetimer rein.
Oder du machst es ohne Thread aber mit einem Handler und postDelayed.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Aron Brast
  • Forum-Beiträge: 92

07.09.2014, 15:00:11 via Website

Danke schonmal :)
könntest du mir vielleicht einen kleinen Beispielcode senden ?

Antworten
Jakob N.
  • Forum-Beiträge: 282

07.09.2014, 16:10:59 via App

Du hast eine Endlosschleife.

LG Jakob

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.09.2014, 19:11:21 via App

@Jakob: Richtig. Ist mir nicht aufgefallen. Wohl zu schnell überflogen.m

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Micha Roth
  • Forum-Beiträge: 26

08.09.2014, 03:54:31 via Website

Hey,

hier noch ein möglicher Beispielcode:

zuerst Threads und Handler initialisieren.

    DeineKlasse deineKlasse= new deineKlasse();
Thread  deinThread= new Thread(deineKlasse);

 private class DeineKlasse implements Runnable {


  @Override
        public void run() {

while(....) {

//ebenfalls einbauen:
Thread.sleep(1000); //wartet eine Sekunde
mHandler.post(new Runnable() {
@Override
public void run() {
//Verschiebe den Button

         }
     });
} //schlie&szlig;e Schleife
}//schlie&szlig;e run
}//schlie&szlig;e Klasse

Die Klasse wird umfasst von deiner public class

Viele Grüße von

Stirnraten.de - auch gerne bewerten

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.09.2014, 09:54:54 via Website

@Micha: Ich würde es einfacher lösen.
Einen Thread machen, indem die while schleife läuft. Am endeder Schleife muss dan ein Thread#Sleep rein, das isrt richtig.
Aber den Button Verschieben hätte ich mit einem runOnUiThread der Activity gemacht und nicht mit einem Handler.

Aber das musst du Aaron selbst entscheiden, es sollten nämlich beide Methoden funktionieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Micha Roth
  • Forum-Beiträge: 26

08.09.2014, 13:01:03 via Website

Ahhh man lernt eben nie aus ;)

Habe es mir mal angeguckt, da findet Aaron ja auch massig Codebeispiele. Werde ich mir mal merken, falls ich ähnliches realisieren will.

Antworten