千家信息网

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

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要讲解了"android新浪微博图片缩放效果怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"android新浪微博图片缩放效果怎么实现
千家信息网最后更新 2025年01月21日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新浪微博图片缩放效果怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

图片 比例 效果 新浪 屏幕 按钮 学习 事件 内容 同时 对象 尺寸 监听 限制 代码 分辨率 图片资源 大小 实例 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库怎么显示两位小数 软件著作就是软件开发吗 软件开发有关的日文单词 怀柔区网络营销网络技术咨询 国家人口数据库进行查询 水利部网络安全项目 瓮安软件开发专业 西城区正规软件开发要求 网络安全中威胁的定义 荣耀阅读无法连接服务器 计算机软件开发毕业实习 实用网络技术期末考试题库 数据库数据加工怎么描述 戴尔服务器管理平台默认密码 为什么服务器关机时都要填关机理由 设计好的网页怎么再服务器上测试 phi数据库使用 青海安防时钟监控网关服务器 fame数据库 共享服务器打印机找不到 上海通渠网络技术有限公司 盘古网络技术有限公司销售岗 网络安全工程师应该做什么 上海通臻网络技术有限公司 百威网络技术有限公司 锐捷服务器系统安全 中国有哪些网络安全大赛 数据库技术与应用课本的答案 网络安全宣传标语金融 网络安全防护薄弱
0