用Martix 放大缩小ImageView

      程序中以Matrix对象搭配Bitmap的createBitmap()方法来对图片进行缩放,并利用DisplayMetrics对象来取得屏幕显示大小,用以控制图片放大后的尺寸不会超过屏幕显示的区域。

  1. public class EX04_23 extends Activity  
  2. {  
  3. /* 相关变量声明 */  
  4. private ImageView mImageView;  
  5. private Button mButton01;  
  6. private Button mButton02;  
  7. private RelativeLayout layout1;  
  8. private Bitmap bmp;  
  9. private int id=0;   
  10.   
  11. private int displayWidth;  
  12. private int displayHeight;  
  13. private float scaleWidth=1;   
  14.   
  15. private float   
  16.                     scaleHeight=1;   
  17.   
  18. /** Called when the activity is first  
  19.                     created. */  
  20. @Override  
  21. public void onCreate(Bundle   
  22.                     savedInstanceState)  
  23. {  
  24. super.onCreate(savedInstanceState);  
  25. /*加载main.xml Layout */  
  26. setContentView(R.layout.main);  
  27. /* 取得屏幕分辨率大小 */  
  28. DisplayMetrics dm=new   
  29.                     DisplayMetrics();  
  30.   
  31.                     getWindowManager().getDefaultDisplay().getMetrics(dm);  
  32. displayWidth=dm.widthPixels;   
  33.   
  34. /* 屏幕高度须扣除下方Button高度 */  
  35. displayHeight=dm.heightPixels-80;   
  36.   
  37. /* 初始化相关变量 */  
  38. bmp=BitmapFactory.decodeResource(getResources(),   
  39.   
  40. R.drawable.ex04_23);  
  41. mImageView =   
  42.                     (ImageView)findViewById(R.id.myImageView);  
  43. layout1 =   
  44.                     (RelativeLayout)findViewById(R.id.layout1);  
  45. mButton01 =   
  46.                     (Button)findViewById(R.id.myButton1);  
  47. mButton02 =   
  48.                     (Button)findViewById(R.id.myButton2);  
  49. /* 缩小按钮onClickListener */  
  50. mButton01.setOnClickListener(new   
  51.                     Button.OnClickListener()  
  52. {  
  53. @Override  
  54. public void onClick(View v)  
  55. {  
  56. small();  
  57. }  
  58. });  
  59. /* 放大按钮onClickListener */  
  60. mButton02.setOnClickListener(new Button.OnClickListener()   
  61.   
  62. {  
  63. @Override  
  64. public void onClick(View v)  
  65. {  
  66. big();  
  67. }  
  68. });  
  69. }  
  70.   
  71. /* 图片缩小的method */  
  72. private void small()  
  73. {  
  74. int bmpbmpWidth=bmp.getWidth();   
  75.   
  76. int bmpbmpHeight=bmp.getHeight();   
  77.   
  78. /* 设置图片缩小的比例 */  
  79. double scale=0.8;   
  80.   
  81. /* 计算出这次要缩小的比例 */  
  82. scaleWidth=(float) (scaleWidth*scale);   
  83.   
  84. scaleHeight=(float)   
  85.                     (scaleHeight*scale);  
  86. /* 产生reSize后的Bitmap对象 */  
  87. Matrix matrix =  
  88.                     new Matrix();  
  89. matrix.postScale(scaleWidth, scaleHeight);   
  90.   
  91. Bitmap resizeBmp =  
  92.                     Bitmap.createBitmap(bmp,0,0,bmpWidth,   
  93.   
  94.   
  95.                     bmpHeight,matrix,true);  
  96. if(id==0)   
  97.   
  98. {  
  99. /* 如果是第一次按,就删除原来默认的ImageView */  
  100. layout1.removeView(mImageView);  
  101. }  
  102. else  
  103. {  
  104. /* 如果不是第一次按,就删除上次放大缩小所产生的ImageView */  
  105.   
  106.                     layout1.removeView((ImageView)findViewById(id));  
  107. }  
  108. /*  
  109.                     产生新的ImageView,放入reSize的Bitmap对象,再放入Layout中 */  
  110. id++;  
  111. ImageView imageView   
  112.                     = new   
  113.                     ImageView(EX04_23.this);  
  114. imageView.setId(id);  
  115. imageView.setImageBitmap(resizeBmp);  
  116. layout1.addView(imageView);  
  117. setContentView(layout1);  
  118. /* 因为图片放到最大时放大按钮会disable,所以在缩小 
  119.                     时把它重设为enable */  
  120. mButton02.setEnabled(true);  
  121. }  
  122. /* 图片放大的method */  
  123. private void big()  
  124. {  
  125. int bmpbmpWidth=bmp.getWidth();   
  126.   
  127. int bmpbmpHeight=bmp.getHeight();   
  128.   
  129. /* 设置图片放大的比例 */  
  130. double scale=1.25;   
  131.   
  132. /* 计算这次要放大的比例 */  
  133. scaleWidth=(float)(scaleWidth*scale);   
  134.   
  135. scaleHeight=(float)(scaleHeight*scale);   
  136.   
  137.   
  138. /* 产生reSize后的Bitmap对象 */  
  139. Matrix matrix   
  140.                     = new Matrix();  
  141. matrix.postScale(scaleWidth, scaleHeight);  
  142. Bitmap resizeBmp   
  143.                     = Bitmap.createBitmap(bmp,0,0,bmpWidth,   
  144.   
  145.   
  146.                     bmpHeight,matrix,true);  
  147.   
  148. if(id==0)  
  149. {  
  150. /* 如果是第一次按,就删除原来设置的ImageView */  
  151. layout1.removeView(mImageView);  
  152. }  
  153. else  
  154. {  
  155. /* 如果不是第一次按,就删除上次放大缩小所产生的ImageView */  
  156. layout1.removeView((ImageView)findViewById(id));  
  157. }  
  158. /* 产生新的ImageView,放入reSize的Bitmap对象,再放入Layout中 */  
  159. id++;  
  160. ImageView imageView =  
  161.                     new   
  162.                     ImageView(EX04_23.this);  
  163. imageView.setId(id);  
  164. imageView.setImageBitmap(resizeBmp);  
  165. layout1.addView(imageView);  
  166. setContentView(layout1);  
  167.   
  168. /* 如果再放大会超过屏幕大小,就把Button disable */  
  169. if(scaleWidth*scale*bmpWidth>displayWidth||   
  170.   
  171. scaleHeight*scale*bmpHeight>displayHeight)   
  172.   
  173. {  
  174. mButton02.setEnabled(false);  
  175. }  
  176. }  
  177. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值