package org.abp.zoom;
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.drawable.Drawable; 
import android.view.KeyEvent; 
import android.view.View; 
public class Zoom extends View { 
	private Drawable image; 
	private int zoomControler=20; 
	public Zoom(Context context) 
	{ 
		super(context); 
		image=context.getResources().getDrawable(R.drawable.miranda_kerr); 
		setFocusable(true); 
	} 
	@Override 
	protected void onDraw(Canvas canvas) { 
		// TODO Auto-generated method stub 
		super.onDraw(canvas); 
		image.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler); 
		image.draw(canvas); 
	} 
	@Override 
	public boolean onKeyDown(int keyCode, KeyEvent event) { 
		if(keyCode==KeyEvent.KEYCODE_DPAD_UP)// zoom in 
			zoomControler+=10; 
		if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // zoom out 
			zoomControler-=20; 
		if(zoomControler<10) 
			zoomControler=10; 
		invalidate(); 
		return true; 
	} 
} 

 package org.abp.zoom;
import android.app.Activity; 
import android.os.Bundle; 
public class Zooming extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle icicle) { 
        super.onCreate(icicle); 
        setContentView(new Zoom(this)); 
    } 
}


위에 소스는 이미지를 zoom in/out 할 수있는 코드입니다.




 package com.ssamddak;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class TestImageNavigation extends Activity {
	
	NaviImageView nImageView;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        
        nImageView = new NaviImageView(this);
        nImageView.setBitmap( BitmapFactory.decodeResource(getResources(), R.drawable.samples_3));
        
        setContentView(nImageView);
    }
    
    class NaviImageView extends View {
    	
    	public Bitmap image = null;
    	
    	private float startX = 0;
    	private float startY = 0;
    	
    	private float userX = 0;
    	private float userY = 0;
    	
    	final static int TOUCH_TOLERANCE = 4;
    	
    	public NaviImageView(Context context) {
    		super(context);
    		// TODO Auto-generated constructor stub
    	}
    	public NaviImageView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		// TODO Auto-generated constructor stub
    	}
    	public NaviImageView(Context context, AttributeSet attrs, int defStyle) {
    		super(context, attrs, defStyle);
    		// TODO Auto-generated constructor stub
    	}
    	
    	public void setBitmap(Bitmap temp) {
    		image = temp;
    		
    		userX = (image.getWidth() - getWindowManager().getDefaultDisplay().getWidth())/ -2;
    		userY = (image.getHeight() - getWindowManager().getDefaultDisplay().getHeight())/ -2;
    	}
    	@Override
    	protected void onDraw(Canvas canvas) {
    		// TODO Auto-generated method stub
			if ( image != null)
				canvas.drawBitmap(image,  userX,  userY, null);
    	}
    	
    	@Override
    	public boolean onTouchEvent(MotionEvent event) {
    		// TODO Auto-generated method stub
    		
    		float x = event.getX();
    		float y = event.getY();
    		
    		switch ( event.getAction() ) {
    		
    		case MotionEvent.ACTION_DOWN:
    			setUserNavi(x, y);
    			break;
    			
    		case MotionEvent.ACTION_MOVE:
    			processNavi(x, y);
				setUserNavi(x, y);
				
    			invalidate();
    			
    			break;
    			
    		case MotionEvent.ACTION_UP:
    			
    			clearStartPoint();
    			invalidate();
    			
    			break;
    		}
    		
    		return true;
    	}
    	
    	private void processNavi(float x, float y) {
    		
    		if( Math.abs( (startX - x)) > TOUCH_TOLERANCE || 
    				Math.abs( (startY - y) ) > TOUCH_TOLERANCE ) {
    			
				if ( startX > x )
					userX -= (startX - x );
				else
					userX += ( x - startX );
				
				if ( startY < y) 
					userY += ( y - startY );
				else 
					userY -= (startY - y);
			}
    	}
    	
    	private void setUserNavi(float x, float y) {
    		startX = x; startY = y;
    	}
    	
    	private void clearStartPoint() {
    		startX = startY = 0;
    	}
    }
}


지금 소스는 ssamddak님께서 올려주신 소스이구요..^^ 이미지를 드래그하면서 움직일수 있는 기능입니다.


저 두개의 소스를 합쳐서 zoom 했을때도 이미지를 움직이게 하고 싶은데 잘 안되네요.. 계속적으로 코딩을 해봤지만 혹시나 아시는 분이 있지 않을까해서 글을 올립니다.

zoom 소스에서 핵심 부분은 바로
image.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler); 
		image.draw(canvas); 

이 부분인데요.. setBounds부분만 bitmap으로 하면 될거 같은데.. 여간 어려운게 아니네요.. 

zoom in/out 소스는 필요하신분들은 참고 하시면 좋겠네요..^^