I used the following code to detect the single finger touch and double finger touch. The code detects the double finger touch (when count==2).
I need t
You checked that ACTION_DOWN but at the same time you also need to check ACTION_POINTER_DOWN, which makes sense more clear. try it
@Override
public boolean onTouchEvent(MotionEvent event) {
scaleGestureDetector.onTouchEvent(event);
int action = event.getAction();
if( (action == MotionEvent.ACTION_DOWN) && (action != MotionEvent.ACTION_POINTER_DOWN))
// Single touch
else if ( action == MotionEvent.ACTION_POINTER_DOWN)
//multi touch
return true;
}
Edited
boolean multiTouch=false;
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
int index= event.getActionIndex();
int action = event.getAction();
if( index ==1)
{
multiTouch=true;
System.out.println("mutli");
}
else if (multiTouch==false)
System.out.println("single");
//else if (action== MotionEvent.ACTION_POINTER_1_UP)
// multiTouch=false;
else if (action== MotionEvent.ACTION_MOVE && multiTouch)
System.out.println("mutli");
else if (action== MotionEvent.ACTION_MOVE && !multiTouch)
System.out.println("single");
return super.onTouchEvent(event);
}
EDITED:
package com.pinch.detect;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.FloatMath;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import android.view.ScaleGestureDetector.SimpleOnScaleGestureListener;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class PinchDetectorActivity extends Activity {
TextView textGestureAction;
ImageView img1, img2;
static Bitmap bm, bm1;
boolean multiTouch = false;
Context context;
float scaleFactor = 0.0f;
float lastscale;
int scr_width, scr_height;
Display display;
private ScaleGestureDetector scaleGestureDetector;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textGestureAction = (TextView) findViewById(R.id.GestureAction);
img1 = (ImageView) findViewById(R.id.img_left);
img2 = (ImageView) findViewById(R.id.img_right);
display = getWindowManager().getDefaultDisplay();
scr_width = display.getWidth();
scr_height = display.getHeight();
Log.v("width >>", Integer.toString(scr_width));
Log.v("height >>", Integer.toString(scr_height));
bm = BitmapFactory.decodeResource(this.getResources(),
R.drawable.fiction1);
img1.setImageBitmap(bm);
bm1 = BitmapFactory.decodeResource(this.getResources(),
R.drawable.fiction2);
img2.setImageBitmap(bm1);
img1.setScaleType(ImageView.ScaleType.FIT_START);
img2.setScaleType(ImageView.ScaleType.FIT_END);
scaleGestureDetector = new ScaleGestureDetector(this,
new MySimpleOnScaleGestureListener());
img1.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
system.out.println("Image 1 touched");
return false;
}
});
img2.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
system.out.println("Image 2 touched");
return false;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
scaleGestureDetector.onTouchEvent(event);
int index = event.getActionIndex();
Log.v("Index value ",index+"");
int action = event.getAction();
if (index == 1) {
multiTouch = true;
System.out.println("mutli1");
} else if (multiTouch == false) {
System.out.println("single1");
img1.onTouch(view, event);
}
else if (action == MotionEvent.ACTION_MOVE && multiTouch) {
System.out.println("mutli2");
img2.onTouch(view, event);
if (scaleFactor > 1) {
Bitmap resizedbitmap = Bitmap.createScaledBitmap(bm,
scr_width / 2, scr_height, true);
img1.setImageBitmap(resizedbitmap);
Bitmap resizedbitmap1 = Bitmap.createScaledBitmap(bm1,
scr_width / 2, scr_height, true);
img2.setImageBitmap(resizedbitmap1);
Log.v("width >>", Integer.toString(scr_width));
Log.v("height >>", Integer.toString(scr_height));
} else if(scaleFactor<1){
Log.v("width >>", Integer.toString(scr_width));
Log.v("height >>", Integer.toString(scr_height));
if (scr_width >= 640) {
Bitmap resizedbitmap = Bitmap.createScaledBitmap(bm,
scr_height + 90, scr_height, true);
img1.setImageBitmap(resizedbitmap);
Bitmap resizedbitmap1 = Bitmap.createScaledBitmap(bm1,
scr_height + 90, scr_height, true);
img2.setImageBitmap(resizedbitmap1);
} else {
Bitmap resizedbitmap = Bitmap.createScaledBitmap(bm,
scr_height, scr_height + 30, true);
img1.setImageBitmap(resizedbitmap);
Bitmap resizedbitmap1 = Bitmap.createScaledBitmap(bm1,
scr_height, scr_height + 30, true);
img2.setImageBitmap(resizedbitmap1);
}
}
} else if (action == MotionEvent.ACTION_MOVE && !multiTouch)
{
System.out.println("single2");
}
return super.onTouchEvent(event);
}
public class MySimpleOnScaleGestureListener extends
SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
// TODO Auto-generated method stub
scaleFactor = detector.getScaleFactor();
Log.v("scaleFactor >>>", scaleFactor + "");
return true;
}
}
}
Latest:
if (index == 1) {
multiTouch = true;
img2.onTouch(view, event);
System.out.println("mutli1");
} else if (multiTouch == false) {
System.out.println("single1");
img1.onTouch(view, event);
}
else if (action == MotionEvent.ACTION_MOVE && multiTouch) {
System.out.println("mutli2");