【问题标题】:Android Drag and drop visible/invisibleAndroid 拖放可见/不可见
【发布时间】:2016-02-29 15:57:34
【问题描述】:

我使用拖放将视图拖到目标上。 我很难弄清楚如何使被拖动的原始视图在被拖动时不可见,并且在拖动结束时再次可见,但它不会被拖放到目标上。

final TextView dragText1 = (TextView) v.findViewById(R.id.text_user_drags_1);
dragText1.setOnTouchListener(new MyTouchListener());
final TextView target1 = (TextView) v.findViewById(R.id.text_target_1);
target1.setOnDragListener(new MyDragListener());


 private final class MyTouchListener implements View.OnTouchListener {
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            ClipData data = ClipData.newPlainText("", "");
            DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            view.startDrag(data, shadowBuilder, view, 0);
           // view.setVisibility(View.INVISIBLE);
            return true;
        } else {
            //view.setVisibility(View.VISIBLE);
            return true;
        }
    }
}
class MyDragListener implements OnDragListener {

    @Override
    public boolean onDrag(View v, DragEvent event) {
        int action = event.getAction();
        switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:

                TextView draggedView2 = (TextView) event.getLocalState();
                ViewGroup owner1 = (ViewGroup) draggedView2.getParent();
                owner1.setVisibility(View.INVISIBLE);
                Log.d(TAG, "DRAG STARTED");
                break;
            case DragEvent.ACTION_DRAG_ENTERED:

                Log.d(TAG, "DRAG ENTERED");
                break;
            case DragEvent.ACTION_DRAG_EXITED:

                Log.d(TAG, "DRAG EXITED");
                break;
            case DragEvent.ACTION_DROP:
                // Dropped, reassign View to ViewGroup
                TextView draggedView = (TextView) event.getLocalState();
                ViewGroup owner = (ViewGroup) draggedView.getParent();
                owner.setVisibility(View.INVISIBLE);
                Log.d(TAG, "DRAG DROPPED");
                break;

            case DragEvent.ACTION_DRAG_ENDED:
                if(event.getAction() == DragEvent.ACTION_DROP){
                    TextView draggedView3 = (TextView) event.getLocalState();
                    ViewGroup owner3 = (ViewGroup) draggedView3.getParent();
                    owner3.setVisibility(View.INVISIBLE);
                }
                TextView draggedView4 = (TextView) event.getLocalState();
                ViewGroup owner4 = (ViewGroup) draggedView4.getParent();
                owner4.setVisibility(View.VISIBLE);
                Log.d(TAG, "DRAG ENDED");
            default:
                break;
        }
        return true;
    }
}

【问题讨论】:

    标签: android drag-and-drop


    【解决方案1】:

    您必须使用事件 ACTION_DRAG_LOCATION。在此事件中,您将获得视图的拖动 X,并将与拖动百分比成比例的 alpha 应用于视图。因此,如果您的视图已被拖动 50%,则应用 0.5 的 alpha;拖动 75%,应用 0.25 的 alpha 等等 (alpha = (100f - drag_percent) / 100f

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 2021-10-26
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多