将EditText与Touch android一起移动

时间:2017-06-10 11:46:35

标签: android android-edittext

我需要随时移动 $.ajax({ url: url, type: 'POST', data: {"nomorDosir": "01041701288", "kodeCabang": "A02"}, processData: false, success: function(data){ console.log("success"+data); }, error: function(e){ console.log("error: "+e); } });

这是我的代码:

EditText

它可以工作并移动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; } }); 和Touch,但问题EditText开始闪烁。意思是以非常高的速度上下移动。 我怎么能阻止它并像平滑一样移动它?

4 个答案:

答案 0 :(得分: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;
        }
    });

答案 1 :(得分: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; 
}

答案 2 :(得分:0)

你试过

吗?
edittext.setY(touchY);

答案 3 :(得分:0)

为视图设置LayoutParam时,会强制视图重绘自身,在您的情况下会导致闪烁。您只需设置视图的X and Y坐标,该坐标不会强制重绘视图,并且您可以通过触摸平滑拖动视图。

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