2010-12-14 6 views
0

Ich zeichne eine Reihe von Bitmaps auf einer Leinwand und benutze MotionEvents, um sie herumzuziehen.Android: Draggable Toast oder Alternative?

Wenn jedes Element gedrückt wird, möchte ich ein Toast- oder Toast-ähnliches Mini-Informationsfeld anzeigen, das die Bewegung der Bitmap verfolgt, die während eines ACTION_MOVE gezogen wird. Der "Toast" würde auf ACTION_DOWN erscheinen und bei ACTION_UP verschwinden.

Das Problem mit Toast ist, dass ich es eine Dauer geben muss, und auch ich kann seine Position nicht ändern, sobald es angezeigt wurde. Es sei denn, ich kann den Toast für jede ACTION_MOVE töten und sofort eine neue an den aktuellen Koordinaten anzeigen lassen. (Entschuldigung, lautes Denken an dieser Stelle, kann nicht zu meinem Rechner kommen, um zu testen ...)

Ich weiß nicht, welche anderen Möglichkeiten es gibt, um dies zu erreichen, und ich würde Vorschläge sehr schätzen aus der Gemeinschaft.

Antwort

1

Hoffe, das hilft, nur gepeitscht, könnte sogar kompilieren!

private boolean mDragging = false; 
private float mTouchX = 0, mTouchY = 0; 
private Paint mTextPaint = new Paint();//need to set this up in onCreate! 

public boolean onTouchEvent(MotionEvent event) 
{ 
    mTouchX = event.getX(); 
    mTouchY = event.getY(); 

    if(event.getAction() == ACTION_DOWN) 
    { 
    mDragging = true; 
    } 
    else if(event.getAction() == ACTION_UP) 
    { 
    mDragging = false; 
    } 

    return true; 
} 

protected void onDraw (Canvas canvas) 
{ 
    /* Put all your bitmap drawing here. */ 

    /* Draw some info text on top of everything else. */ 
    if(mDragging) 
    { 
    String text = mTouchX + ", " + mTouchY; 
    canvas.drawText(mTouchX, mTouchY + 50, text, mTextPaint); 
    } 
} 
+0

Danke Josh, ich werde das so schnell wie möglich ausprobieren. Die Informationen, die ich auf Touch anzeigen möchte, sind jedoch komplexer als nur ein einzelnes Stück Text. Es ist eigentlich eine Statistik für das Objekt, das berührt/gezogen wird. Also, ich denke, ich müsste eine Art benutzerdefinierte Ansicht erstellen und diese anstelle von drawText zeichnen. Wie viel macht das komplizierter? – JimBadger

+0

Sie müssen keine benutzerdefinierte Ansicht erstellen. Sie können Canvas-Zeichnungsmethoden verwenden, um die Sterne und alles, was sonst noch benötigt wird, zu zeichnen. – kgiannakakis

+0

Ok, ich werde es versuchen. Danke Leute. – JimBadger

1

Ein Toast ist in diesem Fall aus den bereits erwähnten Gründen nicht geeignet. Es ist besser, eine Region im Canvas-Bereich zu definieren und die Nachrichtenzeichenfolge dort mit drawText zu zeichnen. Fügen Sie dies in die onDraw-Methode ein und rufen Sie invalidate auf, wenn Sie den Text oder die Position des Message Boards aktualisieren müssen.

+0

Vielen Dank für die Antwort, es war sehr hilfreich. Joshs Antwort ist auch, und ich möchte es in den Kommentaren unter seiner Antwort weiter diskutieren. – JimBadger