gpt4 book ai didi

android - 如何在 onTouchEvent() 中检测单点触摸和多点触摸

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:28 24 4
gpt4 key购买 nike

我使用以下代码来检测单指触摸和双指触摸。代码检测到双指触摸(当 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 中使用了这段代码。我需要检测单点触控,多点触控。

在我的 Activity 中,我有两张图片,一张在左边,一张在右边。如果我单击图像,则必须执行某些过程。如果我使用两根手指,我需要根据 scale-factor 调整图像的大小。

这是我用过的代码:

更新:

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>

最佳答案

如果我理解正确的话,单点触摸不会导致 ACTION_POINTER_UP,而是 ACTION_UP。这就是为什么它没有检测到单个手指。请参阅此帖子以供引用: https://stackoverflow.com/a/4269592/1084813

关于android - 如何在 onTouchEvent() 中检测单点触摸和多点触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9910293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com