ImageButton mit bewegtem Bild

U

Unicate

Erfahrenes Mitglied
57
Hallo alle zusammen!

Ich möchte mir einen Button bauen, der eine Image in sich darstellt, die sich bewegt. Also eine Animation in einem Button. Wie könnte ich das realisieren?

Ich würde den Code am Ende allen zur Verfügung stellen.

Meine "naive" heramgehensweise:

View ableiten, die ein Bitmapobject hält und dann irgendwie versuchen im ondraw die Image zu bewegen. Mit bewegen meine ich sowas ala Ken Burns.

Somit könnte man ein Menü ähnlich der Windowskacheln bauen. Ich habe aktuell eine App in der ich so ein Menü gern hätte.

Irgendwelche Ideen oder Ratschläge?

[Update:]

Ich hab grad mal ein sehr simples Beispiel probiert und bin auf ein recht gutes Ergebnis gekommen. Allerdings glaub ich nicht das das so die Lösung ist:

PHP:
    Bitmap _bitmap;
    private static Paint _paint;
    
    private int _cX, _cY;
    
    private Handler h = new Handler() {
        public void handleMessage(android.os.Message msg) {
            if(null != _mover) {
                _cX+=1;
                _cY+=1;
                TileButton.this.invalidate();
            }
            
        };
    };

    public TileButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        _bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.testimage);
        _cX = _cY = 0;        
        new Thread(new Runnable() {            
            public void run() {
                while(true) {
                    try {
                        Thread.sleep(10);
                        h.sendEmptyMessage(0);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    
                }
            }
        }).start();
    }

    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);        
        canvas.save();
        canvas.scale(3, 3);
        canvas.translate(_cX, _cY);
        canvas.drawBitmap(_bitmap, 0, 0, getPaint());        
        canvas.restore();
    }

    private Paint getPaint() {
        if(null == _paint)
            _paint = new Paint();
        return _paint;
    }
Das das Bild jetzt aus dem Bildschirm wandert, ist mir klar, ich wollte nur mal die Performance testen, wenn ich die Bildupdates mittels invalidate mache.
Ich kann mir aber vorstellen, das das auf älteren Geräten nicht so schön läuft. zusätzlich kann man nicht direkt beeinflussen wann das onDraw aufgerufen wird.
 
Zuletzt bearbeitet:

Ähnliche Themen

B
Antworten
6
Aufrufe
1.051
jogimuc
J
B
Antworten
4
Aufrufe
495
bb321
B
FabianDev
Antworten
5
Aufrufe
560
swa00
swa00
Zurück
Oben Unten