Hi,
weiß jemand wie man Fotos oder Animationen aufs laufende system zeichnet also dass auch wenn andere apps offen sind das Foto/animation auf dem Bildschirm ist.
Fotos oder Animationen aufs laufende system zeichnen
-
-
Ich hab die http://stackoverflow.com/quest…rlay-window-always-on-top seite gefunden hat mir viel geholfen.
-
Du wirst bestimmt versuchen das mit TYPE_SYSTEM_OVERLAY zu bewerkstelligen...
Hab ich auch schon mal versucht... Auch mit TYPE_PHONEFalls du eine vernünftige Lösung, die für Dich funktioniert hat, findest, wärs toll wenn Du hier beschreibst, wie Du es gemacht hast.
-
Wenn ein Button gedrückt wird Started ein intent einen service(deswegen muss aber auch in die Manifest:
<service android:enabled="true" android:name=".running_dude" />)
da mache ich das:WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 0,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.TOP;
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(the_view, params);
the_view ist hier eine erstellte SurfaceView classe.
Um nun eine Animation hinzubekommen starte ich in:
public void surfaceCreated(SurfaceHolder holder) {}Einen Thread.
Der Thread ist wie bei einem spiel aufgebaut also:
@Override
public void run() {while (isRunning) {
Canvas theCanvas = null;try {theCanvas = theView.getHolder().lockCanvas();
synchronized (theView.getHolder()) {
theView.onDraw(theCanvas);
}finally {
if (theCanvas != null) {
theView.getHolder().unlockCanvasAndPost(theCanvas);
}}
durch das sich immer wiederholende onDraw() kann man Bewegungen mitrein bringen.
Dann hat ich noch das problem das der ganze Bildschirm schwarz war also musste ich das machen:
surfaceHolder.setFormat(PixelFormat.TRANSPARENT);...und fertig bisher hab ichs geschaft, dass sich eine Bitmap über den Bildschirm bewegt auch wenn andere apps offen sind ect...
-
Also man braucht insgesamt 4 Klassen :
- 1 Service
- 1 MainActivity (Activity)
- 1 Thread
- 1 SurfaceView
Der Thread und das SurfaceView verhalten sich wie ein spiel zu einander(also loop thread der onDraw immer wieder wiederholt)Der Thread ist also für die Bewegung zuständig und der Service added dem WindowManager(bei mir wm) das SurfaceView.
In der MainActivity wird der Service gestartet. -
Ich habs jetzt statt mit TYPE_SYSTEM_OVERLAY mit TYPE_SYSTEM_ALERT gemacht
(dafür braucht man aber permission system alert window (glaub aber auch für system overlay also egal)) -
Klingt spannend. Wie stellst Du sicher, dass Dein Thread immer auf dem UI Thread läuft und dementsprechend immer an das View und seinen Canvas ran kommt?
-
ich hab erlich gesagt noch keine Ahnung... die bitmap verschwindet auch manchmal aber dann nach einer zeit kommt sie wieder (das soll natürlich nicht so sein aber ich arbeite dran)
-
Wichtig ist nur dass das Androidsystem trotz offener activity problemlos funktioniert... Tut es das? Oder kannst Du in der Zeit, in der Deine App läuft, z.B. Whatsapp nicht öffnen?!
Bin gerade unterwegs, aber ich schaue mir das dann mal genauer an.
Danke schon mal für die Antwort... -
Ja das system läuft aber das geht nur mit TYPE_SYSTEM_OVERLAY nicht mit TYPE_PHONE oder TYPE_SYTEM_ALERT da kann man nicht mehr mit dem system interagieren
-
jetzt habe ich jedoch ein neues problem, weiss jemand wie ich bei SYSTEM_OVERLAY trotzdem noch die Methode onTouch verwenden kann.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!