Android手机开发:图片的放大和缩小显示ImageView


Android手机开发:图片的放大和缩小显示ImageView源码如下:

  1. import android.app.Activity;  
  2. import android.graphics.Bitmap;  
  3. import android.graphics.BitmapFactory;  
  4. import android.graphics.Matrix;  
  5. import android.os.Bundle;  
  6. import android.util.DisplayMetrics;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10. import android.widget.ImageView;  
  11. import android.widget.LinearLayout;  
  12.   
  13. public class ImageZoomActivity extends Activity {  
  14.     private Button myButtonZoomIn;  
  15.     private Button myButtonZoomOut;  
  16.     private LinearLayout myImgLayout;  
  17.     private ImageView myImageView;  
  18.     private Bitmap bmp;  
  19.     private int id = 0;  
  20.     private int displayWidth;  
  21.     private int displayHeight;  
  22.     private float scaleWidth = 1;  
  23.     private float scaleHeight = 1;  
  24.       
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.zoom_in_out);  
  29.           
  30.         //取得屏幕分辨率大小   
  31.         DisplayMetrics dm = new DisplayMetrics();  
  32.         getWindowManager().getDefaultDisplay().getMetrics(dm);  
  33.         displayWidth = dm.widthPixels;  
  34.         //高度为屏幕分辨率,减去按钮高度   
  35.         displayHeight = dm.heightPixels - 80;  
  36.         //初始化bmp   
  37.         bmp = BitmapFactory.decodeResource(getResources(), R.drawable.imgqr);  
  38.           
  39.         myImageView = (ImageView)findViewById(R.id.imageView);  
  40.         myButtonZoomIn = (Button) findViewById(R.id.ZoomInButton);  
  41.         myButtonZoomOut = (Button) findViewById(R.id.ZoomOutButton);  
  42.         myImgLayout = (LinearLayout) findViewById(R.id.imglayout);  
  43.         myButtonZoomIn.setOnClickListener(new Button.OnClickListener() {  
  44.             @Override  
  45.             public void onClick(View v) {  
  46.                 big();  
  47.             }             
  48.         });  
  49.         myButtonZoomOut.setOnClickListener(new Button.OnClickListener() {  
  50.             @Override  
  51.             public void onClick(View v) {  
  52.                 small();  
  53.             }             
  54.         });  
  55.     }  
  56.       
  57.     //图片缩小的方法   
  58.     private void small() {  
  59.         int bmpWidth = bmp.getWidth();  
  60.         int bmpHeight = bmp.getHeight();  
  61.         //设置图片缩小比例   
  62.         double scale = 0.8;  
  63.         //计算出这次要缩小的比例   
  64.         scaleWidth = (float) (scaleWidth * scale);  
  65.         scaleHeight = (float) (scaleHeight * scale);  
  66.           
  67.         //产生ReSize之后的bmp对象   
  68.         Matrix matrix = new Matrix();  
  69.         matrix.postScale(scaleWidth, scaleHeight);  
  70.         Bitmap resizeBmp = Bitmap.createBitmap(bmp, 00, bmpWidth, bmpHeight, matrix, true);  
  71.         if(id == 0) {  
  72.             //如果是第一次按,就删除原来默认的ImageView   
  73.             myImgLayout.removeView(myImageView);  
  74.         }else {  
  75.             //否则,删除上一次放大缩小后产生的ImageView   
  76.             myImgLayout.removeView((ImageView)findViewById(id));  
  77.         }  
  78.         //产生新的ImageView,并放入 resize的Bmp图像,再放入Layout   
  79.         id++;  
  80.         ImageView imageView = new ImageView(ImageZoomActivity.this);  
  81.         imageView.setId(id);  
  82.         imageView.setImageBitmap(resizeBmp);  
  83.         myImgLayout.addView(imageView);  
  84.         myButtonZoomIn.setEnabled(true);  
  85.         //如果太小,则将缩小按钮设为false   
  86.         if(scaleWidth*scale*bmpWidth<10 || scaleHeight*scale*bmpHeight<10) {  
  87.             myButtonZoomOut.setEnabled(false);  
  88.         }  
  89.     }  
  90.       
  91.     //图片放大的方法   
  92.     private void big() {  
  93.         int bmpWidth = bmp.getWidth();  
  94.         int bmpHeight = bmp.getHeight();  
  95.         //设置图片放大比例   
  96.         double scale = 1.25;  
  97.         //计算出这次要缩小的比例   
  98.         scaleWidth = (float) (scaleWidth * scale);  
  99.         scaleHeight = (float) (scaleHeight * scale);  
  100.         //产生ReSize之后的bmp对象   
  101.         Matrix matrix = new Matrix();  
  102.         matrix.postScale(scaleWidth, scaleHeight);  
  103.         Bitmap resizeBmp = Bitmap.createBitmap(bmp, 00, bmpWidth, bmpHeight, matrix, true);  
  104.         if(id == 0) {  
  105.             //如果是第一次按,就删除原来默认的ImageView   
  106.             myImgLayout.removeView(myImageView);  
  107.         }else {  
  108.             //否则,删除上一次放大缩小后产生的ImageView   
  109.             myImgLayout.removeView((ImageView)findViewById(id));  
  110.         }  
  111.         //产生新的ImageView,并放入 resize的Bmp图像,再放入Layout     
  112.         id++;  
  113.         ImageView imageView = new ImageView(ImageZoomActivity.this);  
  114.         imageView.setId(id);  
  115.         imageView.setImageBitmap(resizeBmp);  
  116.         myImgLayout.addView(imageView);  
  117.         myButtonZoomOut.setEnabled(true);  
  118.         //如果再放大将超过屏幕大小,则设置放大按钮为false   
  119.         if(scaleWidth*scale*bmpWidth>displayWidth || scaleHeight*scale*bmpHeight>displayHeight) {  
  120.             myButtonZoomIn.setEnabled(false);  
  121.         }  
  122.     }  
  123.   
  124. }  
对应的XML文件:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical" android:layout_width="fill_parent"  
  4.     android:layout_height="wrap_content">  
  5. <RelativeLayout  
  6.         android:id="@+id/main"  
  7.         android:layout_width="fill_parent"  
  8.         android:layout_height="fill_parent"  
  9.         >  
  10.        <LinearLayout  
  11.             android:id="@+id/imglayout"  
  12.             android:layout_width="fill_parent"  
  13.             android:layout_height="fill_parent"  
  14.             android:orientation="vertical">      
  15.   
  16. <ImageView   
  17.   android:id="@+id/imageView"  
  18.   android:src="@drawable/imgqr"  
  19.   android:layout_width="fill_parent"  
  20.   android:layout_height="wrap_content"/>  
  21.   </LinearLayout>  
  22.     
  23.         <LinearLayout  
  24.             android:id="@+id/bottom_panel"  
  25.             android:layout_width="fill_parent"  
  26.             android:layout_height="wrap_content"  
  27.             android:orientation="horizontal"  
  28.             android:layout_alignParentBottom="true"  
  29.             >  
  30.             <Button  
  31.                 android:id="@+id/ZoomInButton"  
  32.                 android:layout_width="0dp"  
  33.                 android:layout_height="wrap_content"  
  34.                 android:layout_weight="1"  
  35.                 android:layout_gravity="center_vertical"  
  36.                 android:text="Zoom In"  
  37.                 />  
  38.             <Button  
  39.                 android:id="@+id/ZoomOutButton"  
  40.                 android:layout_width="0dp"  
  41.                 android:layout_height="wrap_content"  
  42.                 android:layout_weight="1"  
  43.                 android:layout_gravity="center_vertical"  
  44.                 android:text="Zoom Out"  
  45.                 />  
  46.          </LinearLayout>  
  47.    </RelativeLayout>  
  48. </LinearLayout>  

相关内容