Index: issm/trunk-jpl/src/mobile/android/ISSM_APP/AndroidManifest.xml
===================================================================
--- issm/trunk-jpl/src/mobile/android/ISSM_APP/AndroidManifest.xml	(revision 14843)
+++ issm/trunk-jpl/src/mobile/android/ISSM_APP/AndroidManifest.xml	(revision 14844)
@@ -35,4 +35,9 @@
         </activity>
         <activity
+            android:name="gov.nasa.jpl.issm.ZoomImageViewActivity"
+            android:screenOrientation="portrait"
+            android:label="@string/title_activity_issm" >
+        </activity>
+        <activity
             android:name="gov.nasa.jpl.issm.AboutActivity"
             android:screenOrientation="portrait"
Index: issm/trunk-jpl/src/mobile/android/ISSM_APP/bin/AndroidManifest.xml
===================================================================
--- issm/trunk-jpl/src/mobile/android/ISSM_APP/bin/AndroidManifest.xml	(revision 14843)
+++ issm/trunk-jpl/src/mobile/android/ISSM_APP/bin/AndroidManifest.xml	(revision 14844)
@@ -35,4 +35,9 @@
         </activity>
         <activity
+            android:name="gov.nasa.jpl.issm.ZoomImageViewActivity"
+            android:screenOrientation="portrait"
+            android:label="@string/title_activity_issm" >
+        </activity>
+        <activity
             android:name="gov.nasa.jpl.issm.AboutActivity"
             android:screenOrientation="portrait"
Index: issm/trunk-jpl/src/mobile/android/ISSM_APP/src/gov/nasa/jpl/issm/GalleryImage.java
===================================================================
--- issm/trunk-jpl/src/mobile/android/ISSM_APP/src/gov/nasa/jpl/issm/GalleryImage.java	(revision 14843)
+++ issm/trunk-jpl/src/mobile/android/ISSM_APP/src/gov/nasa/jpl/issm/GalleryImage.java	(revision 14844)
@@ -3,6 +3,6 @@
 import java.util.ArrayList;
 import java.util.List;
-
 import android.app.Activity;
+import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
@@ -20,4 +20,5 @@
 
 public class GalleryImage extends Activity {
+	
 	private GalleryDescription description;
 	private ImageView selectedImageView;
@@ -62,4 +63,15 @@
 		gallery = (Gallery) findViewById(R.id.gallery);
 		description = new GalleryDescription(this);
+		
+		selectedImageView.setOnClickListener(new View.OnClickListener() 
+		{
+			   public void onClick(View view) {
+				    Intent i = new Intent(GalleryImage.this, ZoomImageViewActivity.class);
+					i.putExtra("imagePosition", selectedImagePosition);
+			        startActivity(i);
+			       
+			   }
+			});    
+		
 		infoState.setOnClickListener(new View.OnClickListener() 
 		{
Index: issm/trunk-jpl/src/mobile/android/ISSM_APP/src/gov/nasa/jpl/issm/ZoomImageView.java
===================================================================
--- issm/trunk-jpl/src/mobile/android/ISSM_APP/src/gov/nasa/jpl/issm/ZoomImageView.java	(revision 14844)
+++ issm/trunk-jpl/src/mobile/android/ISSM_APP/src/gov/nasa/jpl/issm/ZoomImageView.java	(revision 14844)
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package gov.nasa.jpl.issm;
+
+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 ZoomImageView extends View {
+    private static final int INVALID_POINTER_ID = -1;
+    
+    private Drawable mIcon;
+    private float mPosX;
+    private float mPosY;
+    
+    private float mLastTouchX;
+    private float mLastTouchY;
+    private int mActivePointerId = INVALID_POINTER_ID;
+    
+    private ScaleGestureDetector mScaleDetector;
+    private float mScaleFactor = 1.f;
+    
+    public ZoomImageView(Context context, int i) {
+        this(context, null, 0, i);
+    }
+    
+    public ZoomImageView(Context context, AttributeSet attrs, int i) {
+        this(context, attrs, 0 ,i);
+    }
+    
+    public ZoomImageView(Context context, AttributeSet attrs, int defStyle, int i) {
+        super(context, attrs, defStyle);
+        mIcon = getResources().getDrawable(getResources().getIdentifier("image"+i, "drawable", context.getPackageName()));
+        int width= context.getResources().getDisplayMetrics().widthPixels;
+        int height= context.getResources().getDisplayMetrics().heightPixels;
+        mIcon.setBounds(0, 0, width, height);
+        
+        mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
+    }
+
+	@Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        // Let the ScaleGestureDetector inspect all events.
+        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;
+            mActivePointerId = ev.getPointerId(0);
+            break;
+        }
+            
+        case MotionEvent.ACTION_MOVE: {
+            final int pointerIndex = ev.findPointerIndex(mActivePointerId);
+            
+            final float x = ev.getX(pointerIndex);
+            final float y = ev.getY(pointerIndex);
+
+            // Only move if the ScaleGestureDetector isn't processing a gesture.
+            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 = INVALID_POINTER_ID;
+            break;
+        }
+            
+        case MotionEvent.ACTION_CANCEL: {
+            mActivePointerId = INVALID_POINTER_ID;
+            break;
+        }
+        
+        case MotionEvent.ACTION_POINTER_UP: {
+            final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) 
+                    >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
+            final int pointerId = ev.getPointerId(pointerIndex);
+            if (pointerId == mActivePointerId) {
+                // This was our active pointer going up. Choose a new
+                // active pointer and adjust accordingly.
+                final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
+                mLastTouchX = ev.getX(newPointerIndex);
+                mLastTouchY = ev.getY(newPointerIndex);
+                mActivePointerId = ev.getPointerId(newPointerIndex);
+            }
+            break;
+        }
+        }
+        
+        return true;
+    }
+
+    @Override
+    public void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        
+        canvas.save();
+        canvas.translate(mPosX, mPosY);
+        canvas.scale(mScaleFactor, mScaleFactor);
+        mIcon.draw(canvas);
+        canvas.restore();
+    }
+
+    private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
+        @Override
+        public boolean onScale(ScaleGestureDetector detector) {
+            mScaleFactor *= detector.getScaleFactor();
+            
+            // Don't let the object get too small or too large.
+            mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));
+
+            invalidate();
+            return true;
+        }
+    }
+}
Index: issm/trunk-jpl/src/mobile/android/ISSM_APP/src/gov/nasa/jpl/issm/ZoomImageViewActivity.java
===================================================================
--- issm/trunk-jpl/src/mobile/android/ISSM_APP/src/gov/nasa/jpl/issm/ZoomImageViewActivity.java	(revision 14844)
+++ issm/trunk-jpl/src/mobile/android/ISSM_APP/src/gov/nasa/jpl/issm/ZoomImageViewActivity.java	(revision 14844)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package gov.nasa.jpl.issm;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.ViewGroup;
+
+public class ZoomImageViewActivity extends Activity {
+    /** Called when the activity is first created. */
+	
+	private int position = 0;
+	
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Bundle image = getIntent().getExtras();
+        {
+        	if(image!= null)
+        	{
+        		position = image.getInt("imagePosition");
+        	}
+        }
+        ZoomImageView view = new ZoomImageView(this,position);
+        view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+                ViewGroup.LayoutParams.MATCH_PARENT));
+        
+        setContentView(view);
+    }
+    public boolean onKeyDown(int keyCode, KeyEvent event) 
+    {
+        if (keyCode == KeyEvent.KEYCODE_BACK)
+        	finish();
+        return true;
+    }
+}
