10

onDraglistenerを実装するクラスで行っていることを、ここでドラッグアンドドロップに使用する必要があるゲームアプリケーションを作成していますonDraglistener

  @Override
public boolean onDrag(View v, DragEvent event) {
    switch (event.getAction()) {
    case DragEvent.ACTION_DRAG_STARTED:
        Log.v("here","drag started");
        //no action necessary
        break;
    case DragEvent.ACTION_DRAG_ENTERED:
        //no action necessary
        Log.v("here","drag enteres");
        break;
    case DragEvent.ACTION_DRAG_LOCATION:
     int mCurX = (int) event.getX();
    int mCurY = (int) event.getY();
    Log.v("Cur(X, Y) : " ,"here ::" + mCurX + ", " + mCurY );
    break;
    case DragEvent.ACTION_DRAG_EXITED:        
        //no action necessary

        Log.v("here","drag exits");
        break;
    case DragEvent.ACTION_DROP:
            .................do what ever when dropped...
     }

touchlistenerここで、ドラッグアンドドロップするビューで私がしていること:

public boolean onTouch(View view, MotionEvent motionEvent) {
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        /*
         * Drag details: we only need default behavior
         * - clip data could be set to pass data as part of drag
         * - shadow can be tailored
         */
        view.setTag("option"+index);
        ClipData data = ClipData.newPlainText("tag", "option"+index);
        shadowBuilder = new View.DragShadowBuilder(view);

        //start dragging the item touched
        view.startDrag(data, shadowBuilder, view, 0);


        offsetX = (int)view.getX();//(int)motionEvent.getX();
         offsetY = (int)view.getY();//motionEvent.getY();
         Log.v("here","it is ::" + (int)motionEvent.getX() + " , "+(int)motionEvent.getY());

         return false;
 }

これで、指をドラッグした場所に gest ドラッグされるシャドウ ビルダーがビルドされます。

ターゲットにドロップされていないときに、シャドウビルダーまたはビューを元の位置に戻すにはどうすればよいですか?

public boolean onInterceptTouchEvent(MotionEvent event)親ビューに移動してx、y位置を取り、元の位置に戻るようにアニメーション化しようとしましたが、アクションがキャンセルされます。

ビューがターゲット以外にドロップされた場所にx、y座標を取得する方法はありますか? 次に、位置間でアニメーション化できます。

4

1 に答える 1

-3

ドロップを処理する必要があります。

switch (event.getAction()) {
    case DragEvent.ACTION_DRAG_ENTERED:
     //break here was removed in purpose so you can see the shadow and the element is still at its initial place.
    case DragEvent.ACTION_DROP:
            View view = (View) event.getLocalState();
        if (prioritiesList.contains(v)) {

            ViewGroup viewgroup = (ViewGroup) view.getParent();
            viewgroup.removeView(view);

            LinearLayout containView = (LinearLayout) v;
            containView.addView(view);
            view.setVisibility(View.VISIBLE);
                    break;
}
于 2014-04-30T15:28:07.450 に答える