Я сделал подвижную плавающую кнопку, ссылаясь на какой-то документ где-то здесь, теперь он может касаться, перетаскивать в любом месте экрана. Но я обновляю фрагмент щелчка этой подвижной плавающей кнопки. Я могу коснуться, но не могу щелкнуть по нему.
public class MainScreen extends Fragment implements View.OnTouchListener {
FloatingActionButton fab;
FrameLayout rootlayout;
int x_Delta;
int y_delta;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_main_screen, container, false);
fab = (FloatingActionButton)rootView.findViewById(R.id.fab);
rootlayout = (FrameLayout) rootView.findViewById(R.id.rootlayout);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(150, 150);
fab.setLayoutParams(layoutParams);
fab.setOnTouchListener(MainScreen.this);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().beginTransaction().detach(MainScreen.this).attach(MainScreen.this).commit();
}
});
return rootView;
}
public boolean onTouch(View view, MotionEvent event) {
final int X = (int) event.getRawX();
final int Y = (int) event.getRawY();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
FrameLayout.LayoutParams lParams = (FrameLayout.LayoutParams) view.getLayoutParams();
x_Delta = X - lParams.leftMargin;
y_delta = Y - lParams.topMargin;
break;
case MotionEvent.ACTION_UP:
if(Math.abs(event.getRawX()- X )<=2){
getFragmentManager().beginTransaction().detach(MainScreen.this).attach(MainScreen.this).commit();
return true;
}
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) view
.getLayoutParams();
layoutParams.leftMargin = X - x_Delta;
layoutParams.topMargin = Y - y_delta;
layoutParams.rightMargin = -250;
layoutParams.bottomMargin = -250;
view.setLayoutParams(layoutParams);
break;
}
rootlayout.invalidate();
return true;
}
}