onOffsetsChanged wird nicht von Touchwiz aufgerufen

8

Hinweis: Da es sich um eine spezielle Frage von Samsung handelt, habe ich sie auch auf ihrer Entwicklerboard .

Ich implementiere gerade ein Live-Hintergrundbild in Android und höre mir die onOffsetsChanged () -Methode in meiner Wallpaper-Engine an, um das Hintergrundbild zu ändern, wenn der Benutzer durch seine Startbildschirme wischt. Das funktioniert gut auf meinem privaten Galaxy Tab mit einem CM9 Custom Rom. Auf meinem Firmengerät, einem serienmäßigen Galaxy S3, funktioniert es nicht. Irgendwie ruft Touchwiz onOffsetsChanged nicht auf, wenn der Homescreen geändert wird.

Googeln für das Thema ergab keine nennenswerten Ergebnisse neben der Beschreibung von diese App , in der das Dev erklärt:" Das Scrollen auf dem neuesten TouchWiz-Launcher wurde behoben, bei dem onOffsetsChanged () nicht aufgerufen wird. " Jetzt würde ich nur den Entwickler kontaktieren, aber leider ist es auch eine Samsung App.

Kennt jemand eine Problemumgehung, um die aktuellen Offsets ohne onOffsetsChanged zu erhalten? Hat jemand in ihrem eigenen Hintergrundbild auf dieses Problem gestoßen? Weiß jemand, ob dies beabsichtigt ist oder ob ich davon ausgehen kann, dass zukünftige Touchwiz-Versionen die Methode wieder verwenden werden?

    
Thrakbad 10.01.2013, 12:43
quelle

1 Antwort

7

Einige Entwickler verwenden Touch-Ereignisse anstelle von systemOffsetsChanged (), um mit TouchWiz zu arbeiten. Ich denke, momentan ist der einzige bessere Weg, das hybride Ereignissystem zu verwenden, das auf diese Weise funktionieren wird:

1) Gehen Sie immer davon aus, dass die onOffsetsChanged () - Nachricht nicht korrekt gesendet wird (stellen Sie die boolesche Eigenschaft auf false).
2) Dies bedeutet, dass Sie implementieren sollten onTouch () - Methode, um onOffsetsChanged () korrekt nachzuahmen. Hören Sie onTouch () nur dann zu, wenn die boolesche Eigenschaft immer noch falsch ist.
3) Wenn onOffsetsChanged () aufgerufen wird, aktivieren Sie den Parameter xOffset. Wenn es weder 0.0f noch 0.5f ist, dann ändere die boolesche Eigenschaft in true und höre nur onOffsetsChanged ().

Code wird wie folgt aussehen:

%Vor%

Dieser Code ist nur eine Illustration . Beachten Sie, dass das Vergleichen von Gleitkommazahlen mit == nicht korrekt ist, aber in diesem Fall funktioniert es möglicherweise.

Sieht auch so aus, als ob Samsung Parallax LWPs genauso funktionieren. Wenn Sie ein Gerät mit TouchWiz und einem anderen einwandfrei funktionierenden Launcher haben (der normalerweise onOffsetsChanged () sendet), können Sie es selbst ausprobieren:

1) Parallax LWP zuerst auf TouchWiz setzen (wichtig!) und sehen, dass es nur von onTouchEvent () abhängt 2) Ändern Sie den Launcher auf den anderen. Sehen Sie, dass LWP jetzt von onOffsetsChanged () abhängt 3) Ändern Sie den Launcher erneut in TouchWiz und sehen Sie, dass das Wischen für dieses LWP nicht mehr funktioniert.

Also, was ich empfehlen hinzuzufügen ist auf jedem onResume () Ereignis ändern Sie die boolesche offsetChangedWorking wieder auf falsch. Dies sollte solche Fehler mit Launcher-Änderungen verhindern.

    
Brainman 28.03.2013, 14:40
quelle

Tags und Links