2017-06-14 59 views
-1

正在尝试使用xamarin的Android(非xamarin还将帮助)的Android怎么做滑动对角线影响使用拖放

我希望用户能够拖动绿色部分做对角线拖动使用(见图片)他手指拖动它必须是对角线(它开始于喜欢红色的部分开始) image

我肠道滑动部分,到目前为止,但我不知道该怎么做对角线滑动部分

private float _viewX; 
    private int _originalLeft; 
    private int _originalRight; 
    private View _greenView; 
    private View _redView; 



    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     SetContentView(Resource.Layout.QuestionsView); 

     _greenView = FindViewById<View>(Resource.Id.greenTrueView); 
     _redView = FindViewById<View>(Resource.Id.redFalseView); 

     _greenView.SetOnTouchListener(this); 
     _redView.SetOnTouchListener(this); 

    } 

    public bool OnTouch(View v, MotionEvent e) 
    { 
     if (v.Equals(_greenView)) 
     { 
      switch (e.Action) 
      { 

       case MotionEventActions.Down: 
        _viewX = e.GetX(); 
        _originalLeft = v.Left; 
        break; 
       case MotionEventActions.Move: 
        var left = (int)(e.RawX - _viewX); 
        v.Layout(left, v.Top, v.Right, v.Bottom); 
        break; 


      } 
     } 
     else 
     { 
      switch (e.Action) 
      { 
       case MotionEventActions.Down: 
        _viewX = e.GetX(); 
        _originalRight = v.Right; 
        break; 
       case MotionEventActions.Move: 
        var right = (int)(_viewX + e.RawX); 
        v.Layout(v.Left, v.Top, right, v.Bottom); 
        break; 


      } 
     } 
     return true; 
    } 
+0

能否请您发布一些代码,显示你有什么到目前为止已经试过? –

+0

嗨@ ElvisXia-MSFT,用当前代码编辑我有 –

回答

0

我肠道滑动部分,到目前为止,但我不知道如何通过每一个滑动做对角线滑动部分

对角线滑动装置,垂直偏移具有偏移固定比率的水平。例如:45度对角线滑动:垂直偏移= 1 *(水平偏移)。所以,你需要做的只是根据_viewX偏移修改垂直:

private View green_view,red_view; 
private float _viewX; 
private float _viewY; 
private int _originalLeft,_originalRight; 

if(v.Equals(green_view)) 
    { 
     switch (event.Action) 
     { 
      case MotionEventActions.Down: 
       _viewX=event.GetX(); 
       _viewY=event.GetY(); 
       _originalLeft=v.Left; 
       break; 
      case MotionEventActions.Move: 
       int left=(int)(event.RawX()-_viewX); 
       //if the fixed ratio is 1, you can set it by any number like 1/2 
       int top=left; 
       v.Layout(left,top,v.Right,v.Bottom); 
       break; 
     } 
... 
+0

感谢您的帮助,您是否看到我张贴在想要实现的滑动问题的图像?在您的解决方案中,您只需更改顶部布局点,这意味着当我拖动它时,它将从底部角落开始并向上移动。 –

+0

请扩大您的'视图',让它足够大以覆盖整个屏幕。 –

+0

不知道你是什么意思,当我们开始活动时,绿色视图高度占用所有可用空间(起始宽度在我的情况下是30dp),如果我使用你的代码,并改变顶部,因为你更改了视图高度并没有把所有的高度更多 –