web-dev-qa-db-fra.com

Comment détecter une entrée tactile sur Android?

À l'heure actuelle, tout ce que j'essaie de faire est de détecter le moment où l'écran est enfoncé, puis d'afficher un message de journal pour confirmer que cela s'est produit. Jusqu'à présent, mon code est modifié à partir de l'exemple de code CameraPreview (il prendra éventuellement une photo) de sorte que la majeure partie du code se trouve dans une classe qui étend SurfaceView. L'API pour l'exemple de code du SDK est 7. 

12
RyoxSinfar

Essayez le code ci-dessous pour détecter les événements tactiles.

mView.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        //show dialog here
        return false;
    }
});

Pour afficher la boîte de dialogue, utilisez la méthode d'activité showDialog (int) . Vous devez implémenter onCreateDialog (). Voir la documentation pour plus de détails.

23
Dariusz Bacinski

Voici un exemple simple sur la façon de détecter un événement tactile simple, d’obtenir des coordonnées et de porter un toast. Les événements dans cet exemple sont Action bas, Déplacer et Action haut. 

import Android.app.Activity;
import Android.os.Bundle;
import Android.view.MotionEvent;
import Android.widget.Toast;

public class MainActivity extends Activity {

    private boolean isTouch = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        int X = (int) event.getX();
        int Y = (int) event.getY();
        int eventaction = event.getAction();

        switch (eventaction) {
            case MotionEvent.ACTION_DOWN:
                Toast.makeText(this, "ACTION_DOWN AT COORDS "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
                isTouch = true;
                break;

            case MotionEvent.ACTION_MOVE:
                Toast.makeText(this, "MOVE "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
                break;

            case MotionEvent.ACTION_UP:
                Toast.makeText(this, "ACTION_UP "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }
}
14
MSA

Je l'ai fait comme ça:

public class ActivityWhatever extends Activity implements OnTouchListener
{

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.yourlayout);

        //the whole screen becomes sensitive to touch
        mLinearLayoutMain = (LinearLayout) findViewById(R.id.layout_main);
        mLinearLayoutMain.setOnTouchListener(this);
    }

    public boolean onTouch(View v, MotionEvent event)
    {
        // TODO put code in here

        return false;//false indicates the event is not consumed
    }
}

dans le xml de votre vue, spécifiez:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:id="@+id/layout_main">

    <!-- other widgets go here-->

</LinearLayout>
4
Someone Somewhere

J'ai essayé beaucoup et j'ai finalement trouvé une solution pour détecter le toucher sur un écran après 2 jours.

Kotlin:

Si vous rencontrez une barre de navigation inférieure et que vous souhaitez vous cacher au toucher, essayez ceci!

Activity.dispatchTouchEvent (MotionEvent) - Ceci permet à votre activité D'intercepter tous les événements tactiles avant qu'ils ne soient envoyés à la fenêtre .

  override fun dispatchTouchEvent(event: MotionEvent): Boolean {

   if (event.getAction() === MotionEvent.ACTION_DOWN) {
       if (event.getAction() === MotionEvent.ACTION_DOWN) {




       }
   } else if (event.getAction() === MotionEvent.ACTION_MOVE) {
       tabLayout.visibility = View.GONE
       tv_chat.visibility = View.GONE



   } else if (event.getAction() === MotionEvent.ACTION_UP) {

       tabLayout.visibility = View.VISIBLE
       tv_chat.visibility = View.VISIBLE

   }
    return super.dispatchTouchEvent(event)
}
1
Rohit Shrivastava