android : Dragging view within the layout size (sceen size)

霸气de小男生 提交于 2019-12-08 09:35:47

问题


I want the imageview to be draggable only within the screen size . But the problem with the below code is , only left and top margin stops the imageview,how to implement if statement for right and bottom margin so that it stops the view from going out of focus. below is the code , Thanks in advance

            public boolean onTouch(View view, MotionEvent event) {

            DisplayMetrics displaymetrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
            float screenHeight = displaymetrics.heightPixels;
            float screenWidth = displaymetrics.widthPixels;

            final int x = (int) event.getRawX();
            final int y = (int) event.getRawY();

            if(view==image1){
                switch (event.getAction() & MotionEvent.ACTION_MASK) {

                    case MotionEvent.ACTION_DOWN:
                        LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams)
                                view.getLayoutParams();
                        xDelta = x - lParams.leftMargin;
                        yDelta = y - lParams.topMargin;
                        x1Delta = lParams.rightMargin;
                        y2Delta = lParams.bottomMargin;
                        break;

                    case MotionEvent.ACTION_UP:                        
                        break;

                    case MotionEvent.ACTION_MOVE:
                        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) view
                                .getLayoutParams();
                         //below leftMargin , topMargin works fine
                        if((x - xDelta) > 0 && (x - xDelta) < screenWidth ){layoutParams.leftMargin = x - xDelta;}
                        if((y - yDelta) > 0 && (y - yDelta) < screenHeight){layoutParams.topMargin = y - yDelta;}
                        layoutParams.rightMargin = 0;//how to make this stops the imageview on rightMargin
                        layoutParams.bottomMargin = 0;//how to make this stops the imageview on bottomMargin
                            view.setLayoutParams(layoutParams);
                        break;
                }
                mainLayout.invalidate();
            }
            return true;
        }
    };

回答1:


After a Long research I found the answer myself and I also changed LinearLayout to AbsoluteLayout..

 @Override
        public boolean onTouch(View view, MotionEvent event) {

                switch (event.getAction() & MotionEvent.ACTION_MASK) {

                    case MotionEvent.ACTION_DOWN:
                        xDelta = event.getX();
                        yDelta = event.getY();
                        break;

                    case MotionEvent.ACTION_POINTER_DOWN:
                        oldDist = spacing(event);
                        if (oldDist > 10f) {
                            mode = ZOOM;
                        }

                    case MotionEvent.ACTION_UP:
                        break;

                    case MotionEvent.ACTION_MOVE:
                        x1Delta = event.getX() - xDelta ;
                        y2Delta = event.getY() - yDelta;

                        m_posX = m_prevX + x1Delta;
                        m_posY = m_prevY + y2Delta;

                        if (m_posX > 0 && m_posY > 0 && (m_posX + view.getWidth()) < mainLayout.getWidth() && (m_posY + view.getHeight()) < mainLayout.getHeight())
                        {
                            view.setLayoutParams(new AbsoluteLayout.LayoutParams(view.getMeasuredWidth(), view.getMeasuredHeight(), (int) m_posX, (int) m_posY));

                            m_prevX = m_posX;
                            m_prevY = m_posY;
                        }

                        break;
                }
                mainLayout.invalidate();
            return true;
        }
    };


来源:https://stackoverflow.com/questions/42810170/android-dragging-view-within-the-layout-size-sceen-size

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!