I'm building an interface where I need to process touch events. In particular I would to be able to enable them only to a confined area in a fragment. To better understand the problem, to respect the standards and for the goal of my application, I planned the navigation drawer, which assumes the presence of many fragment (instead of activities). An activity with touch events is implemented quite easily, on the other hand I have read on the internet that with the fragments can become a problem.
My application, at the architectural level, is as follows: - MainActivity.java - NavigationDrawer.java - TestFragment.java (for a single fragment now, waiting to solve the problem)
I've not found a solution or a tutorial that explains how to do well (or how to workaround the problem). Then I ask you, simplifying the problem to just "enable a touch event in a fragment (getPressure() in this case)". Below are some pieces of code that may help to solve the problem:
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) } }
How to associate the listener to the whole fragment? And in the case of a particular area? Finally, how can I return the value of the pressure on the screen?
Thank you so much in advice! :)
To make sure that each view correctly receives the touch events intended for it, override the onInterceptTouchEvent() method.
The touch event is passed in as a MotionEvent , which contains the x,y coordinates, time, type of event, and other information. The touch event is sent to the Window's superDispatchTouchEvent() .
1.1. You can react to touch events in your custom views and your activities. Android supports multiple pointers, e.g. fingers which are interacting with the screen. The base class for touch support is the MotionEvent class which is passed to Views via the onTouchEvent() method. you override the onTouchEvent() method.
Best way of calling Activity from Fragment class is that make interface in Fragment and add onItemClick() method in that interface. Now implement it to your first activity and call second activity from there.
I'm not sure if I understood your problem, but I will try to answer this. So to get touch events on fragment I would do this:
-in your fragment 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;
and you can check for different MotionEvents in onTouch, for example:
MotionEvent.ACTION_DOWN, MotionEvent.ACTION_UP,...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With