2017-06-14 43 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),如果我使用你的代碼,並改變頂部,因爲你更改了視圖高度並沒有把所有的高度更多 –