Как определить одно касание, а также мультитач в onTouchEvent()

Я использовал следующий код для обнаружения касания одним и двумя пальцами. Код обнаруживает двойное касание пальца (когда count==2).

Мне также нужно выполнить некоторые действия при одиночном касании. Если я касаюсь экрана одним пальцем, он не касается другой части. Что я сделал не так в этом коде?

@Override
public boolean onTouchEvent(MotionEvent event) {
    int action = event.getAction() & MotionEvent.ACTION_MASK;
    switch (action) {
        case MotionEvent.ACTION_POINTER_UP: {
            int count = event.getPointerCount();
            Log.v("count >>", count + "");
            if (count == 2) {
                // some action
            } else {
                Log.v("count not equal to 2", "not 2");
            }
            break;
        }
    }
    return true;
}

Обновление:

Я использовал этот код внутри Activity. Мне нужно обнаружить одно касание, мультитач.

В моей деятельности у меня есть два изображения, одно слева и одно справа. Если я нажму на изображение, какой-то процесс должен выполнить. Если я использую два пальца, мне нужно изменить размер изображения в соответствии с масштабным коэффициентом .

Вот код, который я использовал:

Обновлено:

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
                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.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Log.v("clicked image1","img1>>>");
                }
            });
            img2.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) { // TODO Auto-generated method
                    Log.v("clicked image2","img2>>>");
                }
            });
        }

         else if (action == MotionEvent.ACTION_MOVE && multiTouch) {
            System.out.println("mutli2");


            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;
        }
    }

}

и мой main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:id="@+id/pinchlay" >


    <ImageView
        android:id="@+id/img_left"
        android:layout_width="320dp"
        android:layout_height="fill_parent"
        />

    <ImageView
        android:id="@+id/img_right"
        android:layout_width="320dp"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        />

</RelativeLayout>
11
задан Pankaj Lilan 9 September 2017 в 13:03
поделиться