2010-12-14 71 views
0

我在畫布上繪製了許多位圖,並使用MotionEvents讓我拖動它們。Android:Draggable吐司,或者選擇?

當每個項目被按下時,我想要顯示一個Toast或Toast類似的迷你信息面板,用於跟蹤在ACTION_MOVE期間被拖動的位圖的移動。 「Toast」將出現在ACTION_DOWN上並在ACTION_UP上消失。

使用吐司的問題是,我必須給它一個持續時間,並且,一旦它已被顯示,我也不能改變它的位置。除非我可以殺死每個ACTION_MOVE的Toast,並在當前座標處立即顯示一個新的? (對不起,此時想念,不能到我的開發機器測試...)

我不知道還有什麼其他的選擇可以實現這一點,我非常感謝你的建議來自社區。

回答

1

希望這會有所幫助,只是鞭打它,甚至可能編譯!

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

謝謝喬希,我會盡快嘗試。但是,我想要在onTouch上顯示的信息比單個文本更復雜。它實際上是一組觸摸/拖動對象的統計數據。所以,我想我需要創建一些自定義視圖,並繪製而不是drawText。 這會使事情複雜化多少? – JimBadger 2010-12-14 21:30:03

+0

您不需要創建自定義視圖。您可以使用Canvas繪圖方法繪製星星和其他所需的其他東西。 – kgiannakakis 2010-12-15 07:17:46

+0

好吧,我會給它一個。多謝你們。 – JimBadger 2010-12-15 09:10:54

1

由於您已經提到的原因,Toast在這種情況下不適用。最好在Canvas上定義一個區域,並使用drawText在那裏繪製消息字符串。把它放在onDraw方法中,每當需要更新文本或留言板的位置時調用invalidate。

+0

非常感謝您的回答,這非常有幫助。喬希的回答也是如此,我想在他的回答下的評論中進一步討論。 – JimBadger 2010-12-14 21:27:14