package exam.MultiTouchZoom;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
public class TouchExampleView extends View
{
	
	private Drawable mIcon;
	private float mPosX;
	private float mPosY;
	private float mLastTouchX;
	private float mLastTouchY;
	
	private static final int POINTER_ID = -1;
	private int mActivePointerId=POINTER_ID;
	private ScaleGestureDetector mScaleDetector;
	private float mScaleFactor = 1.f;
	
	
	
	public TouchExampleView(Context context) {
		this(context , null , 0);
		// TODO Auto-generated constructor stub
		mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
	}
	public TouchExampleView(Context context, AttributeSet attrs) {
		this(context, attrs,0);
		// TODO Auto-generated constructor stub
	}
	public TouchExampleView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
		mIcon = context.getResources().getDrawable(R.drawable.icon);
		mIcon.setBounds(0, 0, mIcon.getIntrinsicWidth(), mIcon.getIntrinsicHeight());
	}
	
	@Override
	public void onDraw(Canvas canvas)
	{
		super.onDraw(canvas);
		
		canvas.save();
		canvas.translate(mPosX, mPosY);
		mIcon.draw(canvas);
		canvas.restore();
	}
	private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener 
	{
	    @Override
	    public boolean onScale(ScaleGestureDetector detector) 
	    {
	        mScaleFactor *= detector.getScaleFactor();
	        
	        // zoom
	        mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));
	        invalidate();
	        return true;
	    }
	}
	
	
	
	
	
	
	
	@Override
	public boolean onTouchEvent(MotionEvent ev)
	{
		mScaleDetector.onTouchEvent(ev);
		
		final int action = ev.getAction();
		switch (action & MotionEvent.ACTION_MASK) {
		case MotionEvent.ACTION_DOWN: 
		{
			final float x = ev.getX();
			final float y = ev.getY();
			
			//시작
			mLastTouchX = x;
			mLastTouchY = y;
			
			// id 기억
			mActivePointerId = ev.getPointerId(0);
			break;
		}
		case MotionEvent.ACTION_MOVE:
		{    
			final float x = ev.getX();
			final float y = ev.getY();
			final int pointerIndex = ev.findPointerIndex(mActivePointerId);
			
			if(!mScaleDetector.isInProgress())
			{
				// 이동거리
				final float dx = x - mLastTouchX;
				final float dy = y - mLastTouchY;
				
				//이동
				mPosX += dx;
				mPosY += dy;
				
				//초기화
				invalidate();
			}
			
			
			//마지막 터치기억
			mLastTouchX = x;
			mLastTouchY = y;
			
			break;
		}
		case MotionEvent.ACTION_UP :
		{
			mActivePointerId = POINTER_ID;
			break;
		}
		case MotionEvent.ACTION_CANCEL :
		{
			mActivePointerId = POINTER_ID;
			break;
		}
		case MotionEvent.ACTION_POINTER_UP :
		{
			final int pointerIndex = (action & MotionEvent.ACTION_POINTER_INDEX_MASK)
						>> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
						
			final int pointerId = ev.getPointerId(pointerIndex);
			
			if(pointerId == mActivePointerId)
			{
				final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
				mLastTouchX = ev.getX(newPointerIndex);
				mLastTouchY = ev.getY(newPointerIndex);
				mActivePointerId = ev.getPointerId(newPointerIndex);
			}
			break;
		}
		default:
			break;
		}
		return true;
		
	}
	
};


멀티터치 동작 관련된 소스입니다. ( 펌 )


이 동작을 메인에서 작동을 시킬려고 하는데요.


메인 엑티비티에서 어떤식으로 해야 이 클래스를 가져와서 동작을 시킬수있나요???




TouchExampleView zoom = new TouchExampleView(this,null,0);


이거까지는 알겠는데..


그 다음에..

먼가 행위를 해줘야 동작을 할거같은데요..


 갑자기 감이안오는데요...답변 부탁드려요.