千家信息网

android新浪微博图片缩放效果怎么实现

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"android新浪微博图片缩放效果怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"android新浪微博图片缩放效果怎么实现
千家信息网最后更新 2025年11月08日android新浪微博图片缩放效果怎么实现

这篇文章主要讲解了"android新浪微博图片缩放效果怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"android新浪微博图片缩放效果怎么实现"吧!

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

package com.Johnson.image.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.image);         //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();       }     }

布局文件如下:

  1. android:orientation="vertical"

  2. android:layout_width="fill_parent"

  3. android:layout_height="fill_parent"

  4. android:id="@+id/layout1"

  5. >

  6. android:layout_width="fill_parent"

  7. android:layout_height="fill_parent"

  8. android:id="@+id/rl"

  9. >

  10. android:layout_width="fill_parent"

  11. android:layout_height="fill_parent"

  12. android:layout_weight="19"

  13. android:scrollbars="none"

  14. android:fadingEdge="vertical"

  15. android:layout_gravity="center"

  16. android:gravity="center"

  17. >

  18. android:layout_height="fill_parent"

  19. android:layout_width="fill_parent"

  20. android:scrollbars="none"

  21. android:layout_gravity="center"

  22. android:gravity="center"

  23. android:id="@+id/hs"

  24. >

  25. android:orientation="horizontal"

  26. android:layout_width="fill_parent"

  27. android:layout_height="fill_parent"

  28. android:id="@+id/layoutImage"

  29. android:layout_gravity="center"

  30. android:gravity="center"

  31. >

  32. android:layout_gravity="center"

  33. android:gravity="center"

  34. android:id="@+id/myImageView"

  35. android:layout_width="fill_parent"

  36. android:layout_height="fill_parent"

  37. android:layout_weight="19"

  38. android:paddingTop="5dip"

  39. android:paddingBottom="5dip"

  40. />

  41. android:layout_width="wrap_content" android:layout_height="wrap_content"

  42. android:layout_centerHorizontal="true"

  43. android:layout_alignParentBottom="true"

  44. >


感谢各位的阅读,以上就是"android新浪微博图片缩放效果怎么实现"的内容了,经过本文的学习后,相信大家对android新浪微博图片缩放效果怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0