web-dev-qa-db-fra.com

Comment gérer les événements tactiles sur un fragment?

Je construis une interface où je dois traiter des événements tactiles. Je voudrais notamment pouvoir les autoriser uniquement dans une zone confinée d'un fragment. Pour mieux comprendre le problème, respecter les normes et pour l'objectif de mon application, j'ai planifié le tiroir de navigation, qui suppose la présence de nombreux fragments (au lieu d'activités). Une activité avec des événements tactiles est mise en œuvre assez facilement, par contre, j'ai lu sur Internet que avec les fragments peut devenir un problème.

Mon application, au niveau architectural, est la suivante: - MainActivity.Java - NavigationDrawer.Java - TestFragment.Java (pour un seul fragment maintenant, en attente de résoudre le problème)

Je n'ai pas trouvé de solution ou de tutoriel qui explique comment bien faire (ou comment résoudre le problème). Ensuite, je vous le demande en simplifiant simplement le problème "activer un événement tactile dans un fragment (getPressure () dans ce cas))". Vous trouverez ci-dessous quelques éléments de code pouvant vous aider à résoudre le problème:

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)
    }
}

Comment associer l'auditeur à l'ensemble du fragment? Et dans le cas d'un domaine particulier? Enfin, comment puis-je retourner la valeur de la pression sur l'écran?

Merci beaucoup dans le conseil! :)

38
user3319400

Je ne sais pas si j'ai bien compris votre problème, mais je vais essayer d'y répondre. Donc, pour obtenir des événements tactiles sur un fragment, je voudrais faire ceci:

-dans votre 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;

et vous pouvez rechercher différents événements MotionEvents dans onTouch, par exemple:

MotionEvent.ACTION_DOWN, MotionEvent.ACTION_UP,...
98
intips