2016-08-17 3 views
2

J'ai un projet dans lequel je dois compter les contacts sur ImageView. Si l'utilisateur touche l'ImageView trois fois de suite, déclenchez une action.Déclenche une action lorsque ImageView est tapé trois fois dans un temps spécifique - Android

J'ai essayé d'utiliser setOnTouchListener, mais je n'ai trouvé aucune méthode pouvant renvoyer un compteur d'entiers.

est ici vue abstraite de ce que je veux atteindre:

if(touches == 3) { 
//perform the action. 
} 

Quelqu'un peut-il me dire comment puis-je compter sur fingertouches ImageView? Aussi, s'il y a une meilleure approche, faites le moi savoir.

+0

S'il vous plaît essayer d'avoir un compteur/compte qui incrémente à chaque clic d'imageview. Une fois que le compteur atteint 3, déclenchez votre action. – sumandas

+0

@sumandas j'ai essayé ceci, et cela fonctionne, mais le problème est - ceci déclenchera une action sur trois clics n'importe quand. Ce que je veux est - trois clics consécutifs! Dans cette approche, l'utilisateur peut cliquer n'importe quand, et quand trois coups, il se déclenche. la solution devrait être - trois clics en millisecondes devraient faire le travail. sinon aucune action. Pensez-vous que nous pouvons y parvenir en utilisant cette approche? –

+0

S'il y a un autre clic en dehors de 'ImageView', voulez-vous que le compteur se réinitialise? –

Répondre

0

Ici, vous allez compagnon, plus code snippet

package com.pavneet.activitydemo.DB; 

import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.support.annotation.Nullable; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.Toast; 

import com.pavneet.activitydemo.R; 

/** 
* Created by Pavneet Singh on 20/06/16. 
*/ 
public class TestA extends AppCompatActivity { 

    private int i=0; 
    private ImageView imageView; 

    Handler handler=new Handler(){ 
     @Override 
     public void handleMessage(Message msg) { 
      if (msg.what==100){ 
       i=0; 
      } 
     } 
    }; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.test_ab); 
     imageView=(ImageView) findViewById(R.id.imageButtontest); 

     imageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (i==0){ 
        ++i; 
        handler.sendEmptyMessageDelayed(100,3000); // 3000 equal 3sec , you can set your own limit of secs 
       }else if(i==2){ 
        Toast.makeText(TestA.this, "Three Touch Clicked" , Toast.LENGTH_SHORT).show(); 
        i=0; 
        handler.removeMessages(100); 
       }else 
        ++i; 
      } 
     }); 

    } 
} 

Code mise en page

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_margin="16dp" 
    android:layout_height="match_parent"> 
<ImageView 
    android:src="@mipmap/ic_launcher" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageButtontest" 
     android:layout_gravity="center_horizontal" /> 
</LinearLayout> 
+0

Merci pavneet va essayer cela et vous le faire savoir dès que je reçois sur l'ordinateur. :) –

+0

Votre accueil, je l'ai testé, j'espère que cela vous rendra heureux. Je l'aurais fait hier mais j'étais bien au-delà de mon heure de coucher quand je suis tombé sur ce post. C'est pour ça que nous sommes là pour nous aider les uns les autres. Heureux codage –

+0

merci, ça marche très bien. J'apprécie beaucoup vos efforts. –

0

Conserver un nombre de ImageView touche dans votre Activity ou Fragment ou la mise en œuvre de onTouchEvent. Si vous préférez 3 touches en succession rapide, comme un "triple clic" utiliser un ArrayList pour enregistrer les temps de SystemClock. Si la différence était inférieure à votre seuil, considérez qu'il a touché 3 fois.

+0

Je veux spécifiquement sur ImageView seulement, oui j'ai envisagé d'implémenter 'onTouchEvent', mais dans mon cas, ce n'est pas ce que je veux. –

0

si vous voulez faire une action tous les 3 essayer ce code

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    public static int i = 0; 
    ImageView myimage; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     myimage = (ImageView) findViewById(R.id.myimg); 
     myimage.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case (R.id.myimg): { 
       ++i; 
       if (i % 3 == 0) { 
//your logic here every 3rd attempt 
// if you want to check it on only first 3 attempt if(i==3){some action} 

        Toast.makeText(this, "image is clicked", Toast.LENGTH_LONG).show(); 
       } 
       break; 
      } 

     } 
    } 
} 
+0

merci, et cela fonctionne comme je l'ai dit dans les commentaires ci-dessus, mais le problème est que je veux 3 clics à se produire dans un délai précis. par exemple, 3 secondes maximum pour obtenir trois clics, sinon réinitialiser le compteur. –