Android开发中有时会用到图片缩放效果,即点击图片时显示缩放按钮,过一会消失。本文就根据新浪微博的图片缩放给大家写一个实例,以供参考。下面直接上代码。

Java代码
  1. package com.Johnson.image.zoom;    
  2. import android.app.Activity;    
  3. import android.app.Dialog;    
  4. import android.app.ProgressDialog;    
  5. import android.content.DialogInterface;    
  6. import android.content.DialogInterface.OnKeyListener;    
  7. import android.graphics.Bitmap;    
  8. import android.graphics.BitmapFactory;    
  9. import android.graphics.Matrix;    
  10. import android.os.Bundle;    
  11. import android.os.Handler;    
  12. import android.util.DisplayMetrics;    
  13. import android.util.Log;    
  14. import android.view.KeyEvent;    
  15. import android.view.MotionEvent;    
  16. import android.view.View;    
  17. import android.view.View.OnClickListener;    
  18. import android.widget.ImageView;    
  19. import android.widget.LinearLayout;    
  20. import android.widget.RelativeLayout;    
  21. import android.widget.ZoomControls;    
  22.   
  23. public class MainActivity extends Activity {    
  24.         /** Called when the activity is first created. */    
  25.   private final int LOADING_IMAGE = 1;    
  26.   public static String KEY_IMAGEURI = "ImageUri";    
  27.   private ZoomControls zoom;    
  28.   private ImageView mImageView;    
  29.   private LinearLayout layoutImage;    
  30.   private int displayWidth;    
  31.   private int displayHeight;    
  32.   /**图片资源*/    
  33.   private Bitmap bmp;    
  34.   /**宽的缩放比例*/    
  35.   private float scaleWidth = 1;    
  36.   /**高的缩放比例*/    
  37.   private float scaleHeight = 1;    
  38.   /**用来计数放大+1    缩小-1*/    
  39.   private int    zoomNumber=0;    
  40.   /**点击屏幕显示缩放按钮,三秒消失*/    
  41.   private int showTime=3000;    
  42.   RelativeLayout rl;    
  43.   Handler mHandler = new Handler();    
  44.   private Runnable task = new Runnable() {    
  45.     public void run() {    
  46.            
  47.       zoom.setVisibility(View.INVISIBLE);            
  48.     }    
  49.   };    
  50.         @Override    
  51.         public void onCreate(Bundle savedInstanceState) {    
  52.                 super.onCreate(savedInstanceState);    
  53.                 setContentView(R.layout.main);    
  54.     //showDialog(LOADING_IMAGE);    
  55.     //图片是从网络上获取的话,需要加入滚动条    
  56.         bmp=BitmapFactory.decodeResource(getResources(), R.drawable.image);    
  57.     //removeDialog(LOADING_IMAGE);    
  58.          initZoom();    
  59. }    
  60.   @Override    
  61.   protected Dialog onCreateDialog(int id) {    
  62.     switch (id) {    
  63.     case LOADING_IMAGE: {    
  64.       final ProgressDialog dialog = new ProgressDialog(this);    
  65.       dialog.setOnKeyListener(new OnKeyListener() {    
  66.         @Override    
  67.         public boolean onKey(DialogInterface dialog, int keyCode,    
  68.             KeyEvent event) {    
  69.           if (keyCode == KeyEvent.KEYCODE_BACK) {    
  70.             finish();    
  71.           }    
  72.           return false;    
  73.         }    
  74.       });    
  75.       dialog.setMessage("正在加载图片请稍后...");    
  76.       dialog.setIndeterminate(true);    
  77.       dialog.setCancelable(true);    
  78.       return dialog;    
  79.     }    
  80.     }    
  81.     return null;    
  82.   }    
  83.   public void initZoom() {    
  84.   
  85.     /* 取得屏幕分辨率大小 */    
  86.     DisplayMetrics dm = new DisplayMetrics();    
  87.     getWindowManager().getDefaultDisplay().getMetrics(dm);    
  88.     displayWidth = dm.widthPixels;    
  89.     displayHeight = dm.heightPixels;    
  90.     mImageView = (ImageView) findViewById(R.id.myImageView);    
  91.     mImageView.setImageBitmap(bmp);    
  92.     layoutImage = (LinearLayout) findViewById(R.id.layoutImage);    
  93.     mImageView.setOnClickListener(new OnClickListener() {    
  94.            
  95.       @Override    
  96.       public void onClick(View v) {    
  97.         // TODO Auto-generated method stub    
  98.                                 /**   
  99.                                  * 在图片上和整个view上同时添加点击监听捕捉屏幕   
  100.                                  * 点击事件,来显示放大缩小按钮      
  101.                                  * */           
  102.         zoom.setVisibility(View.VISIBLE);    
  103.         mHandler.removeCallbacks(task);    
  104.         mHandler.postDelayed(task, showTime);    
  105.       }    
  106.     });    
  107.     layoutImage.setOnClickListener(new OnClickListener() {    
  108.            
  109.       @Override    
  110.       public void onClick(View v) {    
  111.         // TODO Auto-generated method stub    
  112.            
  113.         zoom.setVisibility(View.VISIBLE);    
  114.         mHandler.removeCallbacks(task);    
  115.         mHandler.postDelayed(task, showTime);    
  116.       }    
  117.     });    
  118.         
  119.     zoom = (ZoomControls) findViewById(R.id.zoomcontrol);    
  120.     zoom.setIsZoomInEnabled(true);    
  121.     zoom.setIsZoomOutEnabled(true);    
  122.     // 图片放大    
  123.     zoom.setOnZoomInClickListener(new OnClickListener() {    
  124.       public void onClick(View v) {    
  125.         big();    
  126.       }    
  127.     });    
  128.     // 图片减小    
  129.     zoom.setOnZoomOutClickListener(new OnClickListener() {    
  130.   
  131.       public void onClick(View v) {    
  132.         small();    
  133.       }    
  134.   
  135.     });    
  136.     zoom.setVisibility(View.VISIBLE);    
  137.     mHandler.postDelayed(task, showTime);    
  138.   
  139.   }    
  140.   
  141.   @Override    
  142.   public boolean onTouchEvent(MotionEvent event) {    
  143.     // TODO Auto-generated method stub    
  144.          /**   
  145.                  * 在图片上和整个view上同时添加点击监听捕捉屏幕   
  146.                  * 点击事件,来显示放大缩小按钮      
  147.                  * */        
  148.     zoom.setVisibility(View.VISIBLE);    
  149.     mHandler.removeCallbacks(task);    
  150.     mHandler.postDelayed(task, showTime);    
  151.     return false;    
  152.   }    
  153.   
  154.   @Override    
  155.   public boolean onKeyDown(int keyCode, KeyEvent event) {    
  156.     // TODO Auto-generated method stub    
  157.     super.onKeyDown(keyCode, event);    
  158.   
  159.     return true;    
  160.   }    
  161.   
  162.   /* 图片缩小的method */    
  163.   private void small() {    
  164.     --zoomNumber;    
  165.     int bmpWidth = bmp.getWidth();    
  166.     int bmpHeight = bmp.getHeight();    
  167.   
  168.     Log.i("","bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);    
  169.   
  170.     /* 设置图片缩小的比例 */    
  171.     double scale = 0.8;    
  172.     /* 计算出这次要缩小的比例 */    
  173.     scaleWidth = (float) (scaleWidth * scale);    
  174.     scaleHeight = (float) (scaleHeight * scale);    
  175.     /* 产生reSize后的Bitmap对象 */    
  176.     Matrix matrix = new Matrix();    
  177.     matrix.postScale(scaleWidth, scaleHeight);    
  178.     Bitmap resizeBmp = Bitmap.createBitmap(bmp, 00, bmpWidth, bmpHeight,    
  179.         matrix, true);    
  180.     mImageView.setImageBitmap(resizeBmp);    
  181.   
  182.     /* 限制缩小尺寸 */    
  183.     if ((scaleWidth * scale * bmpWidth < bmpWidth / 4    
  184.         || scaleHeight * scale * bmpHeight > bmpWidth /4    
  185.         || scaleWidth * scale * bmpWidth > displayWidth / 5    
  186.         || scaleHeight * scale * bmpHeight > displayHeight / 5)&&(zoomNumber==-1) ){    
  187.            
  188.     zoom.setIsZoomOutEnabled(false);    
  189.         
  190.     } else {    
  191.            
  192.     zoom.setIsZoomOutEnabled(true);    
  193.        
  194.     }    
  195.         
  196.     zoom.setIsZoomInEnabled(true);    
  197.     System.gc();    
  198.   }    
  199.   
  200.   /* 图片放大的method */    
  201.   private void big() {    
  202.     ++zoomNumber;    
  203.     int bmpWidth = bmp.getWidth();    
  204.     int bmpHeight = bmp.getHeight();    
  205.   
  206.     /* 设置图片放大的比例 */    
  207.     double scale = 1.25;    
  208.     /* 计算这次要放大的比例 */    
  209.     scaleWidth = (float) (scaleWidth * scale);    
  210.     scaleHeight = (float) (scaleHeight * scale);    
  211.     /* 产生reSize后的Bitmap对象 */    
  212.     Matrix matrix = new Matrix();    
  213.     matrix.postScale(scaleWidth, scaleHeight);    
  214.     Bitmap resizeBmp = Bitmap.createBitmap(bmp, 00, bmpWidth, bmpHeight,    
  215.         matrix, true);    
  216.     mImageView.setImageBitmap(resizeBmp);    
  217.     /* 限制放大尺寸 */    
  218.     if (scaleWidth * scale * bmpWidth > bmpWidth * 4    
  219.         || scaleHeight * scale * bmpHeight > bmpWidth * 4    
  220.         || scaleWidth * scale * bmpWidth > displayWidth * 5    
  221.         || scaleHeight * scale * bmpHeight > displayHeight * 5) {    
  222.            
  223.       zoom.setIsZoomInEnabled(false);    
  224.         
  225.     } else {    
  226.            
  227.       zoom.setIsZoomInEnabled(true);    
  228.        
  229.     }    
  230.        
  231.     zoom.setIsZoomOutEnabled(true);    
  232.         
  233.   System.gc();    
  234.   }    
  235.        
  236. }  

        布局文件如下:

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>        
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"        
  3.         android:orientation="vertical"        
  4.         android:layout_width="fill_parent"        
  5.         android:layout_height="fill_parent"        
  6.         android:id="@+id/layout1"        
  7.             >        
  8.             
  9.      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"        
  10.                 android:layout_width="fill_parent"        
  11.                 android:layout_height="fill_parent"        
  12.              android:id="@+id/rl"       
  13.                 >        
  14.                     
  15.         <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"               
  16.                 android:layout_width="fill_parent"        
  17.                 android:layout_height="fill_parent"           
  18.                 android:layout_weight="19"        
  19.                 android:scrollbars="none"        
  20.                 android:fadingEdge="vertical"    
  21.                 android:layout_gravity="center"       
  22.                 android:gravity="center"        
  23.              >        
  24.                    
  25.         <HorizontalScrollView           
  26.                 android:layout_height="fill_parent"        
  27.                 android:layout_width="fill_parent"    
  28.                 android:scrollbars="none"    
  29.                  android:layout_gravity="center"       
  30.                 android:gravity="center"       
  31.                 android:id="@+id/hs"    
  32.                     
  33.                     >        
  34.                 <LinearLayout    
  35.                         android:orientation="horizontal"        
  36.                         android:layout_width="fill_parent"        
  37.                         android:layout_height="fill_parent"        
  38.                         android:id="@+id/layoutImage"       
  39.                         android:layout_gravity="center"       
  40.                         android:gravity="center"        
  41.                         >        
  42.                         <ImageView       
  43.                             android:layout_gravity="center"       
  44.                             android:gravity="center"        
  45.                                 android:id="@+id/myImageView"        
  46.                                 android:layout_width="fill_parent"        
  47.                                 android:layout_height="fill_parent"        
  48.                                 android:layout_weight="19"        
  49.                                 android:paddingTop="5dip"        
  50.                                 android:paddingBottom="5dip"       
  51.                     
  52.                                 />        
  53.                 </LinearLayout>        
  54.         </HorizontalScrollView >        
  55.         </ScrollView>       
  56.                     
  57.              <ZoomControls android:id="@+id/zoomcontrol"    
  58.       android:layout_width="wrap_content" android:layout_height="wrap_content"    
  59.       android:layout_centerHorizontal="true"    
  60.             android:layout_alignParentBottom="true"    
  61.       >    
  62.     </ZoomControls>    
  63.         </RelativeLayout>        
  64.   
  65. </FrameLayout>      

 

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/example/69.html
2012年6月7日
发布:鸡啄米 分类:Android开发实例 浏览: 评论:1