2 ImageViews nacheinander befüllen, befüllt aber teilweise beide

  • Antworten:5
  • Bentwortet
Anna Bauer
  • Forum-Beiträge: 5

15.10.2014, 16:17:30 via Website

Hallo Leute,

ich habe ein kleines Problem mit zwei ImageViews.

Ich hoffe ihr könnt den Thread einigermaßen lesen, die Vorschau mag irgendwie keine Leerzeilen (thinking)

Folgendes:
1. Ich bekomme über USB Daten und anhand bestimmter Bytes wird erkannt ob es sich um Bild Typ1 oder Bild Typ2 handelt
2. Die Daten werden in ein Array geschrieben und mit einem Hinweis (String), um welchen Typ es sich handelt, an einen Handler übergeben

Handler handler = new Handler();
//1.
if (imgMatrix[byteCounter - 2] == 0x5A && imgMatrix[byteCounter - 1] == 0x71){
//2.
DataPackage dataPkg = new DataPackage();
dataPkg.setPackageType("Typ1");
dataPkg.setImage(imgMatrix);
Message m = Message.obtain(handler);
m.obj = dataPkg;
handler.sendMessage(m);
} else if (imgMatrix[byteCounter - 2] == 0x5B && imgMatrix[byteCounter - 1] == 0x72){
//2.
DataPackage dataPkg = new DataPackage();
dataPkg.setPackageType("Typ2");
dataPkg.setImage(imgMatrix);
Message m = Message.obtain(handler);
m.obj = dataPkg;
handler.sendMessage(m);
}

3. Im Handler wird ein Bitmap aus den übergebenen Daten erzeugt und an ein Fragment übergeben
private final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
dataPkg = (DataPackage) msg.obj;
bmp.setPixels(dataPkg.getImage(), 0, 800, 0, 0, 800, 600);
if (dataPkg.getPackageType() == "Typ1") {
fragment1.setBitmapTyp1(bmp);
} else if (dataPkg.getPackageType() == "Typ2" ) {
fragment1.setBitmapTyp2(bmp);
}
}
};

4. Im Fragment wird dann in den Setter-Methoden das jeweilige ImageView mit dem Bild befüllt
public void setBitmapTyp1t(Bitmap bmp) {
iView1.setImageBitmap(bmp);
}
public void setBitmapTyp2(Bitmap bmp) {
iView2.setImageBitmap(bmp);
}

Das komische ist, angenommen ich übergebe an den Handler 5 Bilder in folgender Reihenfolge (Typ1, Typ2, Typ2, Typ2, Typ1, Typ1):

  • Typ1 wird nur beim ImageView von Typ1 dargestellt
  • Typ2 wird bei beiden ImageViews von Typ1 und Typ2 dargestellt
  • Typ2 wird nu beim ImageView von Typ2 dargestellt
  • Typ2 wird nu beim ImageView von Typ2 dargestellt
  • Typ1 wird bei beiden ImageViews von Typ1 und Typ2 dargestellt
  • Typ1 wird nur beim ImageView von Typ1 dargestellt

Also wird immer wenn der Typ gewechselt wird das Bild bei beiden ImageViews dargestellt.

Aber warum ist das so?
Was ist an meinem Code falsch?

Hoffe ihr könnt mir helfen!

Viele Grüße
Anna

— geändert am 15.10.2014, 16:19:43

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

15.10.2014, 16:28:01 via Website

Hallo Anna,
Herzlich wilkommen hier im Forum :)
Ich würde mal ein paar Log/Debug Ausgaben infügen, damit du weisst, an welcher stelle die Bilder "gemsicht" werden.
Ich sehe in deinem Code bisher kein Fehler.

LG Pascal

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

Antworten
Georg C.
  • Forum-Beiträge: 235

15.10.2014, 19:52:43 via Website

Hi,
schmeiß (versuche es) alle "else" /n raus und lasse nur die "if" /s. (In allen! - sehe 2 Anweisungen)

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Andy N.
  • Forum-Beiträge: 3.112

15.10.2014, 21:05:57 via App

Wie wird den der byteCounter bestimmt?
Wird der in einer Schleife hoch gezählt?

Antworten
Anna Bauer
  • Forum-Beiträge: 5

16.10.2014, 08:52:57 via Website

Hallo Leute,

danke für die Antworten :)

@ Pascal: Das ist eine gute Idee werde ich gleich machen danke!

@ Georg: Wenn ich die "else" weglasse und nur auf einen Typ prüfe (habe ich bei beiden Typen getestet) funktioniert alles soweit wie es soll, hier werden die Bilder dann nur beim jeweiligen ImageView angezeigt, sobald ich wieder auf beide prüfe ist der Fehler wieder da

@ Andy: Der byteCounter wird hochgezählt wenn Daten eingehen und wird auf 0 gesetzt, wenn ein vollständiges Bild gesendet wurde, also nach Punkt 2.

Viele Grüße
Anna

Antworten
Anna Bauer
  • Forum-Beiträge: 5

16.10.2014, 10:32:39 via Website

PROBLEM GELÖST!!!! :)

Ich versteh noch nicht genau warum, aber es funktioniert!

In der Handler-Methode übergebe ich die aktuellen Daten:

dataPkg = (DataPackage) msg.obj;
bmp.setPixels(dataPkg.getImage(), 0, 800, 0, 0, 800, 600);

Ich dachte, dass hier die vorherigen Daten überschrieben werden, wenn neue kommen.
Wenn ich das Objekt von DataPackage und die Bitmap jedes mal neu erzeuge:

DataPackage dataPkg = (DataPackage) msg.obj;
Bitmap bmp = Bitmap.createBitmap(800, 600, Bitmap.Config.ARGB_8888);
bmp.setPixels(dataPkg.getImage(), 0, 800, 0, 0, 800, 600);

funktioniert es auf einmal!

Viele Grüße
Anna

Alexander Grüßung

Antworten