Привет, у меня есть RecyclerView, на котором я установил onItemLongClickListener внутри своего фрагмента.
Я создаю новый TextView, который я хочу переместить после того, как пользователь двигает пальцем.
adapter.setOnItemLongClickListener(new ProjectTaskAdapter.OnItemLongClickListener() {
@Override
public void onLongClick(View v ) {
TextView tv = new TextView(getActivity());
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(200, 200);
tv.setOnTouchListener(new ChoiceTouchListener());
int metaState = 0;
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
int[] originalPos = new int[2];
v.getLocationInWindow(originalPos);
MotionEvent motionEvent = MotionEvent.obtain(
downTime, eventTime,
MotionEvent.ACTION_DOWN,
originalPos[0], originalPos[1],
metaState
);
layoutParams.topMargin = originalPos[1] ;
layoutParams.leftMargin = originalPos[0];
tv.setLayoutParams(layoutParams);
rootLayoutPlan.addView(tv);
tv.dispatchTouchEvent(motionEvent);
}
});
Я пытаюсь вызвать с помощью метода dispatchTouchEvent следующий ChoiceTouchListener:
public final class ChoiceTouchListener implements View.OnTouchListener{
public boolean onTouch(View view, MotionEvent event){
final int X = (int) ((int) event.getRawX());
final int Y = (int) ((int) event.getRawY());
switch(event.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
_xDelta = X - lParams.leftMargin;
_yDelta = Y - lParams.topMargin;
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
layoutParams.leftMargin = X -_xDelta;
layoutParams.topMargin = Y - _yDelta;
view.setLayoutParams(layoutParams);
break;
}
rootLayoutPlan.invalidate();
return true;
}
}
Проблема в том, что когда я отправляю TouchEvent, он не запускает ACTION_MOVE или ACTION_UP, даже если пользователь двигает пальцем после того, как он долго щелкнул элемент RecyclerView.
Когда я снова нажимаю на новый созданный TextView и двигаю пальцем, все работает, как ожидалось.
Возможно ли, что метод отправки также запускает ACTION_MOVE или Кто-нибудь знает другой способ добиться того же результата?