2016-08-17 6 views
2

ImageView에서 접촉 횟수를 계산해야하는 프로젝트가 있습니다. 사용자가 ImageView를 연속적으로 세 번 터치하면 동작이 트리거됩니다.ImageView가 특정 시간에 세 번 탭된 경우 액션 트리거 - Android

setOnTouchListener을 사용해 보았지만 정수 카운터를 반환 할 수있는 메서드를 찾을 수 없습니다.

는 여기에 내가 무엇을 달성하고자하는의 추상보기입니다 :

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

나는 이미지 뷰에 fingertouches을 계산하는 방법을 누군가가 말해 줄래? 또한 더 나은 방법이 있다면 알려주세요.

+0

카운터를보십시오/각 이미지 뷰를 클릭 할 때마다 증가합니다. 카운터가 도달하면 액션이 트리거됩니다. – sumandas

+0

@sumandas 나는 이것을 시험해 보았지만 효과가 있었다. 그러나 문제는 - 이것은 세 번의 클릭으로 언제든지 행동을 유발할 것이다. 내가 원하는 건 - 세 번의 연속 클릭! 이 접근 방식에서 사용자는 언제든지 클릭 할 수 있으며 3 회 조회하면 트리거됩니다. 해결책은 밀리 세컨드 단위로 세 번의 클릭으로 작업을 수행해야합니다. 그렇지 않으면 아무런 조치도 취하지 않습니다. 이 방법을 사용하여 우리가 달성 할 수 있다고 생각합니까? –

+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

Activity 또는 Fragment 또는 구현 onTouchEventImageView 건의 수를 유지하십시오. '트리플 클릭'과 같이 연속적으로 3 번 터치하는 것을 선호하는 경우 을 사용하여 SystemClock 번부터 기록하십시오. 그 차이가 당신의 문턱 값보다 낮 으면 그것은 3 번 터치되었다고 생각하십시오.

+0

저는 ImageView에서만 특별히 필요합니다. 예를 들어,'onTouchEvent'를 구현하는 것으로 생각했지만, 제 경우에는, 제가 원하지 않습니다. –

0

당신이 어떤 행동을 수행하려는 경우 모든 3이 코드

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 초 동안 최대 3 초, 그렇지 않으면 카운터를 재설정하십시오. –