次のコードを使用して、ビューのScaleGestureを検出します。 ScaleGestureDetectorは正常に動作します。レイアウトに2つの画像が表示されています。 ScaleGestureを検出している間、私は画像のサイズを減らして大きくします。また、画像をクリックしたり触れたりする必要があります。 setOnTouchListenerの代わりにsetOnClickListenerを使用すると、ScaleGestureDetectorが機能しませんでした。 2つの指で画面に触れている間、setOnTouchListenerはScaleGestureDetectorの前に起動します。どのように私はontouchとscaleGestureの両方を達成できますか?androidでScaleGestureDetectorを使用しているときに助けが必要
package com.pinch.detect;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
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.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
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;
String url1="url1111";
String url2="url2222";
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);
try {
URL aURL = new URL(url1);
// parseBitmap(aURL);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
/* Buffered is always good for a performance plus. */
BufferedInputStream bis = new BufferedInputStream(is);
/* Decode url-data to a bitmap. */
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
/* Apply the Bitmap to the ImageView that will be returned. */
img1.setImageBitmap(bm);
URL aURL1 = new URL(url2);
URLConnection conn1 = aURL1.openConnection();
conn1.connect();
InputStream is1 = conn1.getInputStream();
BufferedInputStream bis1 = new BufferedInputStream(is1);
bm1 = BitmapFactory.decodeStream(bis1);
bis1.close();
is1.close();
img2.setImageBitmap(bm1);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
scaleGestureDetector = new ScaleGestureDetector(this,
new MySimpleOnScaleGestureListener());
img1.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "clicked image 1", Toast.LENGTH_SHORT).show();
return false;
}
});
img2.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "clicked image 2", Toast.LENGTH_SHORT).show();
return false;
}
});
/* img1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "clicked image 1", Toast.LENGTH_SHORT).show();
}
});
img2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "clicked image 2", Toast.LENGTH_SHORT).show();
}
});*/
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
scaleGestureDetector.onTouchEvent(event);
return true;
}
public class MySimpleOnScaleGestureListener extends
SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
// TODO Auto-generated method stub
float scaleFactor = detector.getScaleFactor();
if(scaleFactor > 1){
Log.v("inside scale factor if","if");
textGestureAction.setText("Scale Out: " + String.valueOf(scaleFactor));
Bitmap resizedbitmap = Bitmap.createScaledBitmap(bm, 200,
480, true);
img1.setImageBitmap(resizedbitmap);
Bitmap resizedbitmap1 = Bitmap.createScaledBitmap(bm1, 200,
480, true);
img2.setImageBitmap(resizedbitmap1);
}else{
Log.v("inside scale factor else","else");
textGestureAction.setText("Scale In: " + String.valueOf(scaleFactor));
Bitmap resizedbitmap = Bitmap.createScaledBitmap(bm, 400,
480, true);
img1.setImageBitmap(resizedbitmap);
Bitmap resizedbitmap1 = Bitmap.createScaledBitmap(bm1, 400,
480, true);
img2.setImageBitmap(resizedbitmap1);
}
return true;
}
}
}
ScaleGestureDetector onTouchEvent()は常にtrueを返します。 – mdupls
これは現在のバージョンでは当てはまりますが、SDKでのクラスの実装に頼るべきではありません。ドキュメントで示唆されているように、onTouchEvent()の結果を常に渡すことが推奨されます。 –