I am doing the following in my application.

1) Display a image in a activity.

2) Recognize gesture over that image.

3) And also doing pinch and zoom over the same image.

The layout I have created is given below.

*    <?xml version="1.0" encoding="utf-8"?>*
*    <FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android"*
*        android:layout_width="fill_parent"*
*        android:layout_height="fill_parent" >*

*    <ImageView*
*        android:id="@+id/showImg"*
*        android:layout_width="wrap_content"*
*        android:layout_height="wrap_content"*
*        android:layout_gravity="center"*
*        android:scaleType="matrix"*
*        android:src="@drawable/image" >*
*    </ImageView>*

*    </FrameLayout>*

And I am using the following code for the "pinch zoom" and "gesture 
overlayview" (detect the gesture).

*    public class Touch extends Activity implements OnTouchListener {*
*    private static final String TAG = "Touch";*

* // These matrices will be used to move and zoom image*
* Matrix matrix = new Matrix();*
* Matrix savedMatrix = new Matrix();*

* // We can be in one of these 3 states*
* static final int NONE = 0;*
* static final int DRAG = 1;*
* static final int ZOOM = 2;*
* int mode = NONE;*

* // Remember some things for zooming*
* PointF start = new PointF();*
* PointF mid = new PointF();*
* float oldDist = 1f;*

* @Override*
* public void onCreate(Bundle savedInstanceState) {*
* super.onCreate(savedInstanceState);*
* GestureOverlayView gestureOverlayView = new GestureOverlayView(this);*
* View inflate = getLayoutInflater().inflate(R.layout.main, null);*
* gestureOverlayView.addView(inflate);*

* ImageView img = (ImageView) inflate.findViewById(R.id.showImg);*
* img.setScaleType(ImageView.ScaleType.FIT_CENTER);*
* img.setOnTouchListener(this);*

* setContentView(gestureOverlayView);*
* }*

* public boolean onTouch(View v, MotionEvent event) {*
* ImageView view = (ImageView) v;*
* view.setScaleType(ImageView.ScaleType.MATRIX);*
* float scale;*

* // Dump touch event to log*
* dumpEvent(event);*

* // Handle touch events here...*
* switch (event.getAction() & MotionEvent.ACTION_MASK) {*

* case MotionEvent.ACTION_DOWN: // first finger down only *
* Log.d(TAG, "mode=DRAG");*
* mode = DRAG;*
* break;*
* case MotionEvent.ACTION_UP: // first finger lifted*
* case MotionEvent.ACTION_POINTER_UP: // second finger lifted*
* mode = NONE;*
* Log.d(TAG, "mode=NONE");*
* break;*
* case MotionEvent.ACTION_POINTER_DOWN: // second finger down*
* oldDist = spacing(event);*
* Log.d(TAG, "oldDist=" + oldDist);*
* if (oldDist > 5f) {*
* savedMatrix.set(matrix);*
* midPoint(mid, event);*
* mode = ZOOM;*
* Log.d(TAG, "mode=ZOOM");*
* }*
* break;*

* case MotionEvent.ACTION_MOVE:*
* if (mode == DRAG) { // movement of first finger*
* } else if (mode == ZOOM) { // pinch zooming*
* float newDist = spacing(event);*
* Log.d(TAG, "newDist=" + newDist);*
* if (newDist > 5f) {*
* matrix.set(savedMatrix);*
* scale = newDist / oldDist; // thinking i need to play around*
* // with this value to limit it*
* matrix.postScale(scale, scale, mid.x, mid.y);*
* }*
* }*
* break;*
* }*

* // Perform the transformation*
* view.setImageMatrix(matrix);*

* return true; // indicate event was handled*
* }*

* private float spacing(MotionEvent event) {*
* float x = event.getX(0) - event.getX(1);*
* float y = event.getY(0) - event.getY(1);*
* return FloatMath.sqrt(x * x + y * y);*
* }*

* private void midPoint(PointF point, MotionEvent event) {*
* float x = event.getX(0) + event.getX(1);*
* float y = event.getY(0) + event.getY(1);*
* point.set(x / 2, y / 2);*
* }*

* /** Show an event in the LogCat view, for debugging */*
* private void dumpEvent(MotionEvent event) {*
* String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE",*
* "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" };*
* StringBuilder sb = new StringBuilder();*
* int action = event.getAction();*
* int actionCode = action & MotionEvent.ACTION_MASK;*
* sb.append("event ACTION_").append(names[actionCode]);*
* if (actionCode == MotionEvent.ACTION_POINTER_DOWN*
* || actionCode == MotionEvent.ACTION_POINTER_UP) {*
* sb.append("(pid ").append(*
* action >> MotionEvent.ACTION_POINTER_ID_SHIFT);*
* sb.append(")");*
* }*
* sb.append("[");*
* for (int i = 0; i < event.getPointerCount(); i++) {*
* sb.append("#").append(i);*
* sb.append("(pid ").append(event.getPointerId(i));*
* sb.append(")=").append((int) event.getX(i));*
* sb.append(",").append((int) event.getY(i));*
* if (i + 1 < event.getPointerCount())*
* sb.append(";");*
* }*
* sb.append("]");*
* Log.d(TAG, sb.toString());*
* }*
*}*

The issue is mentioned below.

The zoom is not working perfectly. sometimes, I do a pinch or zoom, it is 
not working. 

**NOTE: But when I remove the "GestureOverlayView", the pinch and zoom 
working perfectly over that imageview. But I need "GestureOverlayView" to 
detect gesture.**

Is this a android issue or the coding issue? How can I fix this?

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to android-developers+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to