Как обрабатывать сенсорные события на фрагменте?
Я создаю интерфейс, где мне нужно обрабатывать события касания. В частности, я мог бы включить их только в ограниченную область в фрагменте.
Чтобы лучше понять проблему, соблюдать стандарты и цель моего приложения, я планировал ящик навигации, который предполагает наличие большого количества фрагментов (вместо действий). Активность с сенсорными событиями выполняется довольно легко, с другой стороны, я прочитал в Интернете, что с фрагментами может стать проблемой.
Мое приложение на архитектурном уровне выглядит следующим образом:
- MainActivity.java
- NavigationDrawer.java
- TestFragment.java(для одного фрагмента теперь, ожидая решения проблемы)
Я не нашел решения или учебника, в котором объясняется, как это сделать (или как обходиться с проблемой). Затем я прошу вас, упрощая задачу только " включить событие касания в фрагменте (getPressure() в этом случае). Ниже приведены некоторые фрагменты кода, которые могут помочь решить проблему:
TestFragment
public class TestFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
public static TestFragment newInstance(int sectionNumber) {
TestFragment fragment = new TestFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public TestFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_test, container, false);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Here I want to return the press value (0 to 1)
}
}
Как связать слушателя со всем фрагментом? А в случае конкретной области? Наконец, как я могу вернуть значение давления на экран?
Большое вам спасибо за советы!:)
Ответы
Ответ 1
Я не уверен, понял ли я вашу проблему, но я постараюсь ответить на это. Поэтому для получения сенсорных событий на фрагменте я бы сделал следующее:
- в вашем фрагменте onCreateView:
View view = inflater.inflate(R.layout.fragment_test, container, false);
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_MOVE){
//do something
}
return true;
}
});
//here the rest of your code
return view;
и вы можете проверить разные MotionEvents в onTouch, например:
MotionEvent.ACTION_DOWN, MotionEvent.ACTION_UP,...