簡體   English   中英

Android在拖放中,Drop無法正常工作

[英]Android in drag and drop , Drop is not working

在這里我放了我的代碼,當我放下視圖(ImageView)時它是不可見的,請幫助我

public class MainActivity extends ActionBarActivity {

    ImageView ivfirst;
    private android.widget.RelativeLayout.LayoutParams layoutParams;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ivfirst = (ImageView) findViewById(R.id.imgView);

        ivfirst.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                ClipData.Item item = new ClipData.Item((CharSequence) v
                        .getTag());
                String[] mimeTypes = { ClipDescription.MIMETYPE_TEXT_PLAIN };

                ClipData dragData = new ClipData(v.getTag().toString(),
                        mimeTypes, item);
                View.DragShadowBuilder myShadow = new View.DragShadowBuilder(
                        ivfirst);

                v.startDrag(dragData, myShadow, null, 0);
                return true;
            }
        });


          ivfirst.setOnDragListener(new View.OnDragListener() {
             @Override
             public boolean onDrag(View v, DragEvent event) {
                switch(event.getAction())
                {
                   case DragEvent.ACTION_DRAG_STARTED:
                   layoutParams = (RelativeLayout.LayoutParams)v.getLayoutParams();

                   // Do nothing
                   break;

                   case DragEvent.ACTION_DRAG_ENTERED:
                   int x_cord = (int) event.getX();
                   int y_cord = (int) event.getY();
                   break;

                   case DragEvent.ACTION_DRAG_EXITED :
                    x_cord = (int) event.getX();
                   y_cord = (int) event.getY();
                   layoutParams.leftMargin = x_cord;
                   layoutParams.topMargin = y_cord;
                   v.setLayoutParams(layoutParams);
                   break;

                   case DragEvent.ACTION_DRAG_LOCATION  :
                   x_cord = (int) event.getX();
                   y_cord = (int) event.getY();
                   break;

                   case DragEvent.ACTION_DRAG_ENDED   :

                   // Do nothing
                   break;

                   case DragEvent.ACTION_DROP:

                   // Do nothing
                   break;
                   default: break;
                }
                return true;
             }
          });
        ivfirst.setOnTouchListener(new View.OnTouchListener() {
            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    ClipData data = ClipData.newPlainText("", "");
                    View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(
                            ivfirst);

                    ivfirst.startDrag(data, shadowBuilder, ivfirst, 0);
                    ivfirst.setVisibility(View.INVISIBLE);

                    return true;
                } else {
                    return false;
                }
            }
        });

    }

}

當我運行該程序時,它正常運行,但無法正常運行,請向我建議我錯了

這是因為您在ACTION_DROP什么也不做。
ACTION_DRAG_EXITED 說明

getAction()返回的操作常量:表示用戶已將拖動陰影移到View的邊界框之外。

拖放時,您尚未為拖動的View定義任何行為。

我研究了Android Launcher代碼,以了解它們如何拖放。 我真的很喜歡他們的對象模型。 他們所做的,可能是對您有益的考慮,是將處理拖放的責任移到了其中包含所有可拖動視圖的ViewGroup中。 觸摸事件在那里處理而不是在您的視圖中處理。

兩個關鍵類別:

DragLayer –實現自定義ViewGroup,該ViewGroup協調屏幕上視圖的移動。 啟動器DragLayer是FrameLayout的子類。

DragController –該對象是執行大多數工作以支持拖放的控制器。

他們要做的另一件事是直到您放下要拖動的對象才移動實際視圖。 但是,它看起來不是那樣,因為在屏幕上您會看到根據手指(或指針)移動而移動的視圖構造的位圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM