以前程序中用到了图片缩放,按照新浪微博效果写了一个(点击图片出现缩放按钮,过一会消失)。分享给大家,代码整理过,可以直接用!
package com.Johnson.p_w_picpath.zoom;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnKeyListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.ZoomControls;

public class MainActivity extends Activity {
         /** Called when the activity is first created. */
    


   private final int LOADING_IMAGE = 1;
   public static String KEY_IMAGEURI = "ImageUri";
   private ZoomControls zoom;
   private ImageView mImageView;
   private LinearLayout layoutImage;
   private int displayWidth;
   private int displayHeight;
   /**图片资源*/
   private Bitmap bmp;
   /**宽的缩放比例*/
   private float scaleWidth = 1;
   /**高的缩放比例*/
   private float scaleHeight = 1;
   /**用来计数放大+1    缩小-1*/
   private int    zoomNumber=0;
   /**点击屏幕显示缩放按钮,三秒消失*/
   private int showTime=3000;

    
  RelativeLayout rl;
  Handler mHandler = new Handler();
   private Runnable task = new Runnable() {
     public void run() {
        
      zoom.setVisibility(View.INVISIBLE);
        
    }
  };
        @Override
         public void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
     //showDialog(LOADING_IMAGE);
     //图片是从网络上获取的话,需要加入滚动条
        bmp=BitmapFactory.decodeResource(getResources(), R.drawable.p_w_picpath);
     //removeDialog(LOADING_IMAGE);
         initZoom();
}
        
        
  @Override
   protected Dialog onCreateDialog( int id) {
     switch (id) {
     case LOADING_IMAGE: {
       final ProgressDialog dialog = new ProgressDialog( this);
      dialog.setOnKeyListener( new OnKeyListener() {
        @Override
         public boolean onKey(DialogInterface dialog, int keyCode,
            KeyEvent event) {
           if (keyCode == KeyEvent.KEYCODE_BACK) {
            finish();
          }
           return false;
        }
      });
      dialog.setMessage( "正在加载图片请稍后...");
      dialog.setIndeterminate( true);
      dialog.setCancelable( true);
       return dialog;
    }
    }
     return null;
  }
    
    
   public void initZoom() {

     /* 取得屏幕分辨率大小 */
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    displayWidth = dm.widthPixels;
    displayHeight = dm.heightPixels;
    mImageView = (ImageView) findViewById(R.id.myImageView);
    mImageView.setImageBitmap(bmp);
    layoutImage = (LinearLayout) findViewById(R.id.layoutImage);
    mImageView.setOnClickListener( new OnClickListener() {
        
      @Override
       public void onClick(View v) {
         // TODO Auto-generated method stub
                                 /**
                                 * 在图片上和整个view上同时添加点击监听捕捉屏幕
                                 * 点击事件,来显示放大缩小按钮    
                                 * */
        
        zoom.setVisibility(View.VISIBLE);
        mHandler.removeCallbacks(task);
        mHandler.postDelayed(task, showTime);
      }
    });
    
    layoutImage.setOnClickListener( new OnClickListener() {
        
      @Override
       public void onClick(View v) {
         // TODO Auto-generated method stub
        
        zoom.setVisibility(View.VISIBLE);
        mHandler.removeCallbacks(task);
        mHandler.postDelayed(task, showTime);
      }
    });
    
    zoom = (ZoomControls) findViewById(R.id.zoomcontrol);
    zoom.setIsZoomInEnabled( true);
    zoom.setIsZoomOutEnabled( true);
     // 图片放大
    zoom.setOnZoomInClickListener( new OnClickListener() {
       public void onClick(View v) {
        big();
      }
    });
     // 图片减小
    zoom.setOnZoomOutClickListener( new OnClickListener() {

       public void onClick(View v) {
        small();
      }

    });
    
    
    
    zoom.setVisibility(View.VISIBLE);
    mHandler.postDelayed(task, showTime);

  }

  @Override
   public boolean onTouchEvent(MotionEvent event) {
     // TODO Auto-generated method stub
         /**
                 * 在图片上和整个view上同时添加点击监听捕捉屏幕
                 * 点击事件,来显示放大缩小按钮    
                 * */
    
    zoom.setVisibility(View.VISIBLE);
    mHandler.removeCallbacks(task);
    mHandler.postDelayed(task, showTime);
     return false;
  }

  @Override
   public boolean onKeyDown( int keyCode, KeyEvent event) {
     // TODO Auto-generated method stub
     super.onKeyDown(keyCode, event);

     return true;
  }

   /* 图片缩小的method */
   private void small() {
    
    
    
    --zoomNumber;
     int bmpWidth = bmp.getWidth();
     int bmpHeight = bmp.getHeight();

    Log.i( "","bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);

     /* 设置图片缩小的比例 */
     double scale = 0.8;
     /* 计算出这次要缩小的比例 */
    scaleWidth = ( float) (scaleWidth * scale);
    scaleHeight = ( float) (scaleHeight * scale);
     /* 产生reSize后的Bitmap对象 */
    Matrix matrix = new Matrix();
    matrix.postScale(scaleWidth, scaleHeight);
    Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight,
        matrix, true);
    mImageView.setImageBitmap(resizeBmp);

     /* 限制缩小尺寸 */
     if ((scaleWidth * scale * bmpWidth < bmpWidth / 4
        || scaleHeight * scale * bmpHeight > bmpWidth /4
        || scaleWidth * scale * bmpWidth > displayWidth / 5
        || scaleHeight * scale * bmpHeight > displayHeight / 5)&&(zoomNumber==-1) ){
        
    zoom.setIsZoomOutEnabled( false);
    
    } else {
        
    zoom.setIsZoomOutEnabled( true);
    
    }
    
    zoom.setIsZoomInEnabled( true);
    System.gc();
  }

   /* 图片放大的method */
   private void big() {
    ++zoomNumber;
     int bmpWidth = bmp.getWidth();
     int bmpHeight = bmp.getHeight();

     /* 设置图片放大的比例 */
     double scale = 1.25;
     /* 计算这次要放大的比例 */
    scaleWidth = ( float) (scaleWidth * scale);
    scaleHeight = ( float) (scaleHeight * scale);
     /* 产生reSize后的Bitmap对象 */
    Matrix matrix = new Matrix();
    matrix.postScale(scaleWidth, scaleHeight);
    Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight,
        matrix, true);
    mImageView.setImageBitmap(resizeBmp);
     /* 限制放大尺寸 */
     if (scaleWidth * scale * bmpWidth > bmpWidth * 4
        || scaleHeight * scale * bmpHeight > bmpWidth * 4
        || scaleWidth * scale * bmpWidth > displayWidth * 5
        || scaleHeight * scale * bmpHeight > displayHeight * 5) {
        
      zoom.setIsZoomInEnabled( false);
    
    } else {
        
      zoom.setIsZoomInEnabled( true);
    
    }
    
    zoom.setIsZoomOutEnabled( true);
    
  System.gc();
  }
    
}
 
 
布局文件
 
<? xml version ="1.0" encoding ="utf-8" ?>    
< FrameLayout xmlns:android ="http://schemas.android.com/apk/res/android"    
         android:orientation ="vertical"    
         android:layout_width ="fill_parent"    
         android:layout_height ="fill_parent"    
         android:id ="@+id/layout1"    
             >    
        
     < RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android"    
                 android:layout_width ="fill_parent"    
                 android:layout_height ="fill_parent"    
             android:id ="@+id/rl"    
                 >    
                
         < ScrollView xmlns:android ="http://schemas.android.com/apk/res/android"            
                 android:layout_width ="fill_parent"    
                 android:layout_height ="fill_parent"        
                 android:layout_weight ="19"    
                 android:scrollbars ="none"    
                 android:fadingEdge ="vertical"
                 android:layout_gravity ="center"    
                 android:gravity ="center"
    
             >    
                
         < HorizontalScrollView        
                 android:layout_height ="fill_parent"    
                 android:layout_width ="fill_parent"
                 android:scrollbars ="none"
                 android:layout_gravity ="center"    
                 android:gravity ="center"    
                 android:id ="@+id/hs"
                
                     >    
                 < LinearLayout
                         android:orientation ="horizontal"    
                         android:layout_width ="fill_parent"    
                         android:layout_height ="fill_parent"    
                         android:id ="@+id/layoutImage"    
                         android:layout_gravity ="center"    
                         android:gravity ="center"    
                         >    
                         < ImageView    
                             android:layout_gravity ="center"    
                             android:gravity ="center"    
                                 android:id ="@+id/myImageView"    
                                 android:layout_width ="fill_parent"    
                                 android:layout_height ="fill_parent"    
                                 android:layout_weight ="19"    
                                 android:paddingTop ="5dip"    
                                 android:paddingBottom ="5dip"    
                
                                 />    
                 </ LinearLayout >    
         </ HorizontalScrollView >    
         </ ScrollView >    
        
            
                
             < ZoomControls android:id ="@+id/zoomcontrol"
       android:layout_width ="wrap_content" android:layout_height ="wrap_content"
       android:layout_centerHorizontal ="true"
             android:layout_alignParentBottom ="true"
       >
     </ ZoomControls >
         </ RelativeLayout >    

</ FrameLayout >