Android - Multitouch

O gesto multitoque ocorre quando mais de um dedo toca a tela ao mesmo tempo. O Android nos permite detectar esses gestos.

O sistema Android gera os seguintes eventos de toque sempre que vários dedos tocam a tela ao mesmo tempo.

Sr. Não Descrição do Evento
1

ACTION_DOWN

Para o primeiro ponteiro que toca a tela. Isso inicia o gesto.

2

ACTION_POINTER_DOWN

Para ponteiros extras que entram na tela além do primeiro.

3

ACTION_MOVE

Uma mudança aconteceu durante um gesto de imprensa.

4

ACTION_POINTER_UP

Enviado quando um ponteiro não primário sobe.

5

ACTION_UP

Enviado quando o último ponteiro sai da tela.

Portanto, para detectar qualquer um dos eventos de menção acima, você precisa substituir onTouchEvent()método e verificar esses eventos manualmente. Sua sintaxe é fornecida abaixo -

public boolean onTouchEvent(MotionEvent ev){
   final int actionPeformed = ev.getAction();

   switch(actionPeformed){
      case MotionEvent.ACTION_DOWN:{
         break;
      }
   
      case MotionEvent.ACTION_MOVE:{
         break;
      }
      return true;
   }
}

Nestes casos, você pode realizar qualquer cálculo que desejar. Por exemplo, zoom, redução, etc. A fim de obter as coordenadas dos eixos X e Y, você pode chamargetX() e getY()método. Sua sintaxe é fornecida abaixo -

final float x = ev.getX();
final float y = ev.getY();

Além desses métodos, existem outros métodos fornecidos por esta classe MotionEvent para lidar melhor com multitoque. Esses métodos estão listados abaixo -

Sr. Não Método e descrição
1

getAction()

Este método retorna o tipo de ação que está sendo realizada

2

getPressure()

Este método retorna a pressão atual deste evento para o primeiro índice

3

getRawX()

Este método retorna a coordenada X bruta original deste evento

4

getRawY()

Este método retorna a coordenada Y bruta original deste evento

5

getSize()

Este método retorna o tamanho do primeiro índice do ponteiro

6

getSource()

Este método obtém a fonte do evento

7

getXPrecision()

Este método retorna a precisão das coordenadas X sendo relatadas

8

getYPrecision()

Este método retorna a precisão das coordenadas Y sendo relatadas

Exemplo

Aqui está um exemplo que demonstra o uso do Multitouch. Ele cria um aplicativo básico de gestos multitoque que permite visualizar as coordenadas quando o multitoque é executado.

Para experimentar este exemplo, você precisa executá-lo em um dispositivo real.

Passos Descrição
1 Você usará o android studio para criar um aplicativo Android em um pacote com.example.sairamkrishna.myapplication.
2 Modifique o arquivo src / MainActivity.java para adicionar código multitoque.
3 Modifique res / layout / activity_main para adicionar os respectivos componentes XML.
4 Execute o aplicativo e escolha um dispositivo Android em execução, instale o aplicativo nele e verifique os resultados.

A seguir está o conteúdo do arquivo de atividade principal modificado src/MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
   float xAxis = 0f;
   float yAxis = 0f;

   float lastXAxis = 0f;
   float lastYAxis = 0f;

   EditText ed1, ed2, ed3, ed4;
   TextView tv1;

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

      ed1 = (EditText) findViewById(R.id.editText);
      ed2 = (EditText) findViewById(R.id.editText2);
      ed3 = (EditText) findViewById(R.id.editText3);
      ed4 = (EditText) findViewById(R.id.editText4);

      tv1=(TextView)findViewById(R.id.textView2);
		
      tv1.setOnTouchListener(new View.OnTouchListener() {
         @Override
         public boolean onTouch(View v, MotionEvent event) {
            final int actionPeformed = event.getAction();

            switch(actionPeformed){
               case MotionEvent.ACTION_DOWN:{
                  final float x = event.getX();
                  final float y = event.getY();

                  lastXAxis = x;
                  lastYAxis = y;

                  ed1.setText(Float.toString(lastXAxis));
                  ed2.setText(Float.toString(lastYAxis));
                  break;
               }

               case MotionEvent.ACTION_MOVE:{
                  final float x = event.getX();
                  final float y = event.getY();

                  final float dx = x - lastXAxis;
                  final float dy = y - lastYAxis;

                  xAxis += dx;
                  yAxis += dy;

                  ed3.setText(Float.toString(xAxis));
                  ed4.setText(Float.toString(yAxis));
                  break;
               }
            }
            return true;
         }
      });
   }
}

A seguir está o conteúdo modificado do xml res/layout/activity_main.xml.

No código abaixo abcindica o logotipo de tutorialspoint.com
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context=".MainActivity"
   android:transitionGroup="true">
   
   <TextView android:text="Multitouch example" android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:theme="@style/Base.TextAppearance.AppCompat" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_below="@+id/imageView"
      android:layout_alignRight="@+id/textview"
      android:layout_alignEnd="@+id/textview"
      android:hint="X-Axis"
      android:layout_alignLeft="@+id/textview"
      android:layout_alignStart="@+id/textview"
      android:textColorHint="#ff69ff0e" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText2"
      android:layout_below="@+id/editText"
      android:layout_alignLeft="@+id/editText"
      android:layout_alignStart="@+id/editText"
      android:textColorHint="#ff21ff11"
      android:hint="Y-Axis"
      android:layout_alignRight="@+id/editText"
      android:layout_alignEnd="@+id/editText" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText3"
      android:layout_below="@+id/editText2"
      android:layout_alignLeft="@+id/editText2"
      android:layout_alignStart="@+id/editText2"
      android:hint="Move X"
      android:textColorHint="#ff33ff20"
      android:layout_alignRight="@+id/editText2"
      android:layout_alignEnd="@+id/editText2" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText4"
      android:layout_below="@+id/editText3"
      android:layout_alignLeft="@+id/editText3"
      android:layout_alignStart="@+id/editText3"
      android:textColorHint="#ff31ff07"
      android:hint="Move Y"
      android:layout_alignRight="@+id/editText3"
      android:layout_alignEnd="@+id/editText3" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Touch here"
      android:id="@+id/textView2"
      android:layout_alignParentBottom="true"
      android:layout_alignLeft="@+id/imageView"
      android:layout_alignStart="@+id/imageView"
      android:focusable="true"
      android:typeface="sans"
      android:clickable="true"
      android:textColor="#ff5480ff"
      android:textSize="35dp" />

</RelativeLayout>

A seguir está o conteúdo do res/values/string.xml.

<resources>
   <string name="app_name">My Application</string>
</resources>

A seguir está o conteúdo de AndroidManifest.xml Arquivo.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
   
   </application>
</manifest>

Vamos tentar executar seu aplicativo. Presumo que você tenha conectado seu dispositivo Android Mobile real ao computador. Para executar o aplicativo do Android Studio, abra um dos arquivos de atividade do seu projeto e clique no ícone Executar na barra de ferramentas. Antes de iniciar seu aplicativo, o Android Studio exibirá a janela a seguir para selecionar uma opção onde você deseja executar seu aplicativo Android.

Selecione seu dispositivo móvel como uma opção e, em seguida, verifique seu dispositivo móvel, que exibirá sua tela padrão -

Por padrão, você não verá nada em nenhum campo. Agora basta tocar na área Toque aqui e ver alguns dados nos campos. É mostrado abaixo -

Você verá que os dados no campo Mover são 0, porque apenas um único gesto de toque foi executado. Agora toque na tela e comece a arrastar o dedo. Você verá a mudança nos dados do campo de movimentação. É mostrado abaixo -