2009-03-31 7 views

答えて

6

はい。それはあなたが達成しようとしているものによって異なります。

それは標準APIを使用してを行うことができますが、この機能は標準APIの一部ではありません。つまり、あなたが書き込まない限り、widget.DragOverHere()メソッドはありません。

しかし、そうするのはひどく複雑ではないと言われました。少なくとも、Viewのカスタムサブクラスを作成し、onDraw(Canvas c)onTouch(MotionEvent e)という2つのメソッドを実装する必要があります。ラフスケッチ:

class MyView extends View { 

    int x, y; //the x-y coordinates of the icon (top-left corner) 
    Bitmap bitmap; //the icon you are dragging around 

    onDraw(Canvas c) { 
     canvas.drawBitmap(x, y, bitmap); 
    } 

    onTouch(MotionEvent e) { 
     switch(e.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     //maybe use a different bitmap to indicate 'selected' 
     break; 
     case MotionEvent.ACTION_MOVE: 
     x = (int)e.getX(); 
     y = (int)e.getY(); 
     break; 
     case MotionEvent.ACTION_UP: 
     //switch back to 'unselected' bitmap 
     break; 
     } 
     invalidate(); //redraw the view 
    } 
} 
0

ある程度まで。それはあなたにどの程度の自由度を与えたいかによって異なります。頭に浮かぶ1つの解決策は、あらかじめ定義されたセルを持つTableLayoutです。その後、ユーザーはコンポーネントをタップしてドラッグできます。コンポーネントをドラッグするときには、そのイメージをユーザーの指で描画したいだけですが、それらがリリースされると、ViewGroupの追加/削除メソッドを使用して、そのコンポーネントを前の親から削除して新しい親に追加します。

ビューをプログラムでシフトすることはできますが、私が見る限りでは、レイアウトをオンザフライで切り替えることは困難/不可能です。

0

私はこれを行っている方法は、絶対的なレイアウトを持っており、それがドラッグされると、次にだけ物体の位置を更新することです。あなたは自分でドラッグを実装する必要があります。ウィジェットが自然な順序(ボタンをドラッグできるようにするツールバー)の場合は、ツールバーの上部に絶対レイアウトを積み重ねることができます。ドラッグが開始されると、それを絶対レイアウトに追加し、終了すると、新しい位置に元のレイアウトに戻します。

関連する問題