I am doing a project in which i need two imageviews in single layout with zooming options. AFAIK android allows one view to make zoom easily. But my problem is not like that. I have two imageviews one over another. I've try to do it in Frame Layout. but the results are not so good. The images are shrink when it goes out of bounds of layout and the zooming is not so smooth. I have tried to do it with the deprecated Absolute layout.but it doesn't work. All suggestions are welcomed.
My Code is here: int x = (int)event.getRawX(); int y = (int)event.getRawY(); ImageView view = (ImageView) v; switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: savedMatrix.set(matrix); start.set(event.getX(), event.getY()); mode = DRAG; hoffset = x - v.getLeft(); voffset = y - v.getTop(); break; case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); Log.d(TAG, "oldDist=" + oldDist); if (oldDist > 10f) { savedMatrix.set(matrix); midPoint(mid, event); mode = ZOOM; Log.d(TAG, "mode=ZOOM"); } break; case MotionEvent.ACTION_UP: // moveView(v, x - hoffset, y - voffset); case MotionEvent.ACTION_POINTER_UP: mode = NONE; Log.d(TAG, "mode=NONE"); break; case MotionEvent.ACTION_MOVE: if (mode == DRAG) { moveView(v, x - hoffset, y - voffset); hrecent = x; vrecent = y; } else if (mode == ZOOM) { newDist = spacing(event); if (newDist > 10f) { matrix.set(savedMatrix); float scale = newDist / oldDist; matrix.postScale(ScaleFactorForZoom, ScaleFactorForZoom, mid.x, mid.y); float delta =10.0f+ (newDist -oldDist)/oldDist; // view.setImageMatrix(matrix); float newHeight; float newWidth; newHeight=(float) ((delta)+view.getHeight()); newWidth=(float) ((delta)+view.getWidth()); oldDist = newDist; zoomView(view, newWidth, newHeight); } } break; } return true; } The MoveView Function is : public void moveView(View v, int x, int y) { ViewGroup.LayoutParams params = v.getLayoutParams(); if (params instanceof FrameLayout.LayoutParams) { FrameLayout.LayoutParams par = (FrameLayout.LayoutParams)params; View parent = (View)(v.getParent()); x = Math.min(x, parent.getWidth()); x = Math.max(x, 0); y = Math.min(y, parent.getHeight()); y = Math.max(y, 0); par.leftMargin=x; par.topMargin=y; v.setLayoutParams(par); } } The Zoom Function is here : public void zoomView(View v, float width, float height) { ViewGroup.LayoutParams params = v.getLayoutParams(); if (params instanceof FrameLayout.LayoutParams) { FrameLayout.LayoutParams par = (FrameLayout.LayoutParams)params; par.width = (int)width; par.height = (int)height; v.setLayoutParams(par); } } -- 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