【问题标题】:Android - Drag and Drop only verticalAndroid - 仅垂直拖放
【发布时间】:2013-07-21 19:03:42
【问题描述】:

我有一个 textView 或小图标,我只想垂直拖动它。

我尝试了什么: 创建一个自己的 ShadowBuilder 但让他不可见。所以其他视图通过 OnDragListener 被调用,但 ShadowView 不可见。

相反,我显示了一个自己的视图,如下所示: How to make the TextView drag in LinearLayout smooth, in android? 跟不同,只是垂直方向。问题是,如果拖动被激活,onTouchListener 只会被调用两次。所以不能移动。

我认为该解决方案对我不起作用。 Drag an image only horizontally or vertically in android?

也许有什么想法?感谢阅读。

【问题讨论】:

    标签: java android drag


    【解决方案1】:
      findViewById(R.id.btn_submit).setOnTouchListener(new View.OnTouchListener()
            {
                int prevX,prevY;
    
                @Override
                public boolean onTouch(final View v,final MotionEvent event)
                {
                    final LinearLayout.LayoutParams par=(LinearLayout.LayoutParams)v.getLayoutParams();
                    switch(event.getAction())
                    {
                        case MotionEvent.ACTION_MOVE:
                        {
                            par.topMargin+=(int)event.getRawY()-prevY;
                            prevY=(int)event.getRawY();
    
                            prevX=(int)event.getRawX();
                            v.setLayoutParams(par);
                            return true;
                        }
                        case MotionEvent.ACTION_UP:
                        {
                            par.topMargin+=(int)event.getRawY()-prevY;
    
                            v.setLayoutParams(par);
                            return true;
                        }
                        case MotionEvent.ACTION_DOWN:
                        {
                            prevX=(int)event.getRawX();
                            prevY=(int)event.getRawY();
                            par.bottomMargin=-2*v.getHeight();
    
                            v.setLayoutParams(par);
                            return true;
                        }
                    }
                    return false;
                }
            });
    

    【讨论】:

      【解决方案2】:

      试试我的解决方案here,但只更改顶部和底部边距。

      【讨论】:

      • 使用您的解决方案滚动到所有区域。我只想要垂直方向
      • @RajeshNasit 所以只改变垂直边距(top&bottom),避免改变水平边距(leftMargin&rightMargin)
      • 谢谢我已经完成了下面的代码。你真的拯救了我的一天:)
      • @RajeshNasit 这也是我在答案中写的。
      猜你喜欢
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      相关资源
      最近更新 更多