2016-08-17 6 views
2

У меня есть проект, в котором мне нужно учитывать штрихи на ImageView. Если пользователь обращается к ImageView три раза непрерывно, затем запускайте действие.Триггерное действие, когда ImageView трижды используется в определенное время - Android

Я пробовал использовать setOnTouchListener, но не смог найти метод, который может возвращать целочисленный счетчик.

Вот абстрактное представление того, что я хочу добиться:

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

Может кто-нибудь сказать мне, как я могу рассчитывать fingertouches на ImageView? Также, если есть лучший подход, дайте мне знать.

+0

Пожалуйста, попробуйте иметь счетчик/count, который увеличивается при каждом щелчке изображения. Как только счетчик достигнет 3, вы активируете свое действие. – sumandas

+0

@sumandas Я пробовал это, и он работает, но проблема в том, что это вызовет действие в три клика в любое время. То, что я хочу, - три последовательных щелчка! В этом подходе пользователь может щелкнуть в любое время, и при трех ударах он запускает. решение должно быть - три щелчка в миллисекундах должны выполнить эту работу. иначе никаких действий. как вы думаете, мы можем достичь этого, используя этот подход? –

+0

Если есть еще один клик вне 'ImageView', вы хотите сбросить счетчик? –

ответ

0

Здесь вы идете мат плюс 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; 
      } 
     }); 

    } 
} 

Компоновка Код

<?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

Спасибо, pavneet попробует это и сообщит вам, как только я получу на компьютере. :) –

+0

Ваш прием, я протестировал его, надеюсь, это сделает вас счастливыми. я бы сделал это вчера, но я прошел мимо моего времени на кровать, когда я наткнулся на этот пост. Ну, вот почему мы здесь правы, помогая друг другу. Счастливое кодирование –

+0

спасибо, оно работает очень хорошо. Я очень ценю ваши усилия. –

0

Содержит подсчет: ImageView касается ваших Activity или Fragment или их реализация onTouchEvent. Если вы предпочитаете 3 касания в быстрой последовательности, например «тройной щелчок», используйте ArrayList для записи времени с SystemClock. Если разница была ниже вашего порога, подумайте, что он коснулся 3 раза.

+0

Я хочу конкретно только на ImageView, да, я подумал о внедрении 'onTouchEvent', но в моем случае это не то, что я хочу. –

0

, если вы хотите сделать какие-то действия каждый третий попробовать этот код

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

спасибо, и это работает, как я сказал в приведенных выше комментариях, но проблема в том, что я хочу, чтобы в течение определенного времени выполнялось 3 клика. например, максимум 3 секунды, чтобы получить три щелчка, если нет, то счетчик сброса. –