【问题标题】:Android Drag and Drop ImageView into another ImageViewAndroid 将 ImageView 拖放到另一个 ImageView
【发布时间】:2017-07-14 14:14:48
【问题描述】:

我在 Android 拖放中遇到了这个问题。我已经在 stackoverflow 上阅读了文档和多个问题/答案。
问题是:
我有 3 个 ImageView 可以在另一个 3 个 ImageView 中移动,但是当我开始拖动 3 个 ImageView 中的一个时,我可以将它放到一个 ImageView 区域中。

Here the code! 。基本上,即使我拖动另一个 ImageView,我也会看到只有 dropViewArancio 区域处于活动状态。 我想要的是让所有 3 个区域都处于活动状态,我可以在其中放置 3 个 ImageView 之一。 感谢支持!

【问题讨论】:

    标签: android drag-and-drop android-imageview


    【解决方案1】:

    一个 ImageView 不能在里面包含另一个 View,只有派生自 ViewGroup 的类可以。然后,您可以将 ImageView 移到另一个之上或后面(取决于 Z 顺序),但不能移到内部。

    这是一个如何使用 onTouch 移动 RelativeLayout 中包含的所有视图的工作示例。我认为 onDrag 事件更适用于拖放数据项,而不是移动视图。希望对你有帮助

    public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
        private RelativeLayout mRelLay;
        private float mInitialX, mInitialY;
        private int mInitialLeft, mInitialTop;
        private View mMovingView = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mRelLay = (RelativeLayout) findViewById(R.id.relativeLayout);
    
            for (int i = 0; i < mRelLay.getChildCount(); i++)
                mRelLay.getChildAt(i).setOnTouchListener(this);
        }
    
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            RelativeLayout.LayoutParams mLayoutParams;
    
            switch (motionEvent.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    mMovingView = view;
                    mLayoutParams = (RelativeLayout.LayoutParams) mMovingView.getLayoutParams();
                    mInitialX = motionEvent.getRawX();
                    mInitialY = motionEvent.getRawY();
                    mInitialLeft = mLayoutParams.leftMargin;
                    mInitialTop = mLayoutParams.topMargin;
                    break;
    
                case MotionEvent.ACTION_MOVE:
                    if (mMovingView != null) {
                        mLayoutParams = (RelativeLayout.LayoutParams) mMovingView.getLayoutParams();
                        mLayoutParams.leftMargin = (int) (mInitialLeft + motionEvent.getRawX() - mInitialX);
                        mLayoutParams.topMargin = (int) (mInitialTop + motionEvent.getRawY() - mInitialY);
                        mMovingView.setLayoutParams(mLayoutParams);
                    }
                    break;
    
                case MotionEvent.ACTION_UP:
                    mMovingView = null;
                    break;
            }
    
            return true;
        }
    }
    

    【讨论】:

    • 感谢您的回答,但我的意思是类似于this。无论如何,我已经用这个tutorial 完成了我需要做的事情,就像你说的“一个 ImageView 不能在里面包含另一个 View”
    【解决方案2】:

    所以,我已经按照tutorial 解决了我的问题。无论如何,我想要的解决方案类似于this,它是教程和先前链接的完美结合。谢谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      相关资源
      最近更新 更多