2017-06-10 60 views
0

我需要移動EditText隨着觸摸。移動EditText隨着觸摸android

這裏是我的代碼:

editText.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      float touchY = event.getY(); 
      RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
      lp.setMargins(0, (int) touchY, 0, 0); 
      editText.setLayoutParams(lp); 
      return true; 
     } 
    }); 

它的工作,並與觸摸一起移動EditText問題EditText開始閃爍。意思是以很高的速度上下移動。 我怎樣才能阻止它,並像平滑一樣移動它?

回答

1

試試這個,它在爲我工作。

代碼:

editText.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      final int Y = (int) event.getRawY(); 
      switch (event.getAction() & MotionEvent.ACTION_MASK) { 
       case MotionEvent.ACTION_DOWN: 
        RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) v.getLayoutParams(); 
        _yDelta = Y - lParams.topMargin; 
        break; 
       case MotionEvent.ACTION_MOVE: 
        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) v.getLayoutParams(); 
        layoutParams.topMargin = Y - _yDelta; 
        v.setLayoutParams(layoutParams); 
        break; 
      } 
      return true; 
     } 
    }); 
0

發生在MotionEvent.ACTION_MOVE代碼

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

    switch (event.getAction() & MotionEvent.ACTION_MASK){ 
    case MotionEvent.ACTION_MOVE: 
    float touchY = event.getY(); 
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    lp.setMargins(0, (int) touchY, 0, 0); 
    editText.setLayoutParams(lp); 
    break; 
    } 

    return true; 
} 
0

你嘗試

edittext.setY(touchY); 
0

當你爲一個視圖設置LayoutParam,它迫使視圖重繪自身而你的情況引起閃爍。你只需要設置你的視圖的座標,這不會強制重畫視圖,而且視圖與你的觸摸平順地拖動。

public boolean onTouch(View view, MotionEvent event) { 
    switch (event.getActionMasked()) { 
     case MotionEvent.ACTION_DOWN: 
     dX = editText.getX() - event.getRawX(); 
     dY = editText.getY() - event.getRawY(); 

     break; 

     case MotionEvent.ACTION_MOVE: 
     editText.setY(event.getRawY() + dY); 
     editText.setX(event.getRawX() + dX); 
     break; 

     default: 
     return false; 
    } 

    return true; 
    } 

您可以按照整個代碼here