蓝蓝的天

蓝蓝的天,白云朵朵。 White clouds in the blue sky.

  • 目录视图
  • 摘要视图
  • 订阅
新版极客头条上线,每天一大波干货     任玉刚:Android开发者的职场规划     从零练就iOS高手实战班震撼来袭     新型数据库利弊谈    

Android实现图片放大缩小

分类: Android应用2010-12-21 14:05 26279人阅读 评论(7) 收藏 举报
androidlayoutbuttonactionvelocitydistance
[java] view plaincopy
  1. package com.min.Test_Gallery;
  2. import android.app.Activity;
  3. import android.graphics.Bitmap;
  4. import android.graphics.BitmapFactory;
  5. import android.graphics.Color;
  6. import android.graphics.Matrix;
  7. import android.os.Bundle;
  8. import android.util.DisplayMetrics;
  9. import android.util.Log;
  10. import android.view.GestureDetector;
  11. import android.view.KeyEvent;
  12. import android.view.MotionEvent;
  13. import android.view.View;
  14. import android.view.GestureDetector.OnGestureListener;
  15. import android.view.View.OnTouchListener;
  16. import android.widget.Button;
  17. import android.widget.FrameLayout;
  18. import android.widget.ImageView;
  19. import android.widget.LinearLayout;
  20. import android.widget.Toast;
  21. public class DisplayImage extends Activity implements OnTouchListener, OnGestureListener  {
  22. private static final String TAG = "DisplayImage";
  23. private static final int FLING_MIN_DISTANCE = 100;
  24. private static final int FLING_MIN_VELOCITY = 200;
  25. /* 相关变量声明 */
  26. private ImageView mImageView;
  27. private Button mButton01;
  28. private Button mButton02;
  29. private FrameLayout layout1;
  30. private LinearLayout layoutImage;
  31. private Bitmap bmp;
  32. private int id=0;
  33. private int displayWidth;
  34. private int displayHeight;
  35. private float scaleWidth=1;
  36. private float scaleHeight=1;
  37. private GestureDetector mGestureDetector;
  38. /** Called when the activity is first created. */
  39. @Override
  40. public void onCreate(Bundle savedInstanceState)    {
  41. super.onCreate(savedInstanceState);
  42. /* 加载display.xml Layout */
  43. setContentView(R.layout.display);
  44. /* 取得屏幕分辨率大小 */
  45. DisplayMetrics dm=new DisplayMetrics();
  46. getWindowManager().getDefaultDisplay().getMetrics(dm);
  47. displayWidth=dm.widthPixels;
  48. displayHeight=dm.heightPixels;
  49. /* 初始化相关变量 */
  50. Bundle bundle = this.getIntent().getExtras();
  51. Integer imageId = bundle.getInt("imageId");
  52. Log.i(TAG, "onCreate, imageId = " + imageId);
  53. bmp=BitmapFactory.decodeResource(getResources(), imageId);
  54. mImageView = (ImageView)findViewById(R.id.myImageView);
  55. mImageView.setImageBitmap(bmp);
  56. mImageView.setOnTouchListener(this);
  57. mImageView.setLongClickable(true);
  58. layout1 = (FrameLayout)findViewById(R.id.layout1);
  59. layoutImage = (LinearLayout)findViewById(R.id.layoutImage);
  60. mButton01 = (Button)findViewById(R.id.myButton1);
  61. mButton02 = (Button)findViewById(R.id.myButton2);
  62. /* 缩小按钮onClickListener */
  63. mButton01.setOnClickListener(new Button.OnClickListener() {
  64. @Override
  65. public void onClick(View v) {
  66. small();
  67. }
  68. });
  69. /* 放大按钮onClickListener */
  70. mButton02.setOnClickListener(new Button.OnClickListener() {
  71. @Override
  72. public void onClick(View v) {
  73. big();
  74. }
  75. });
  76. }
  77. // 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
  78. @Override
  79. public boolean onDown(MotionEvent e) {
  80. // TODO Auto-generated method stub
  81. //      Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();
  82. Log.i(TAG, "onDown...");
  83. return false;
  84. }
  85. /* 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN,
  86. * 多个ACTION_MOVE, 1个ACTION_UP触发
  87. * 参数解释:
  88. * e1:第1个ACTION_DOWN MotionEvent
  89. * e2:最后一个ACTION_MOVE MotionEvent
  90. * velocityX:X轴上的移动速度,像素/秒
  91. * velocityY:Y轴上的移动速度,像素/秒
  92. * 触发条件 :
  93. * X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
  94. * @see android.view.GestureDetector$OnGestureListener#onFling(android.view.MotionEvent, android.view.MotionEvent, float, float)
  95. */
  96. @Override
  97. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  98. float velocityY) {
  99. // TODO Auto-generated method stub
  100. Log.i(TAG, "onFling...");
  101. if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
  102. && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
  103. // Fling left
  104. Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();
  105. } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
  106. && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
  107. // Fling right
  108. Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();
  109. }
  110. return false;
  111. }
  112. // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
  113. @Override
  114. public void onLongPress(MotionEvent e) {
  115. // TODO Auto-generated method stub
  116. Log.i(TAG, "onLongPress...");
  117. }
  118. // 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
  119. @Override
  120. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
  121. float distanceY) {
  122. // TODO Auto-generated method stub
  123. Log.i(TAG, "onScroll...");
  124. return false;
  125. }
  126. // 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
  127. // 注意和onDown()的区别,强调的是没有松开或者拖动的状态
  128. @Override
  129. public void onShowPress(MotionEvent e) {
  130. // TODO Auto-generated method stub
  131. Log.i(TAG, "onShowPress...");
  132. }
  133. // 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
  134. @Override
  135. public boolean onSingleTapUp(MotionEvent e) {
  136. // TODO Auto-generated method stub
  137. Log.i(TAG, "onSingleTapUp...");
  138. return false;
  139. }
  140. @Override
  141. public boolean onTouch(View v, MotionEvent event) {
  142. // TODO Auto-generated method stub
  143. Log.i(TAG, "onTouch...");
  144. // Set button visible
  145. mButton01.setVisibility(View.VISIBLE);
  146. mButton02.setVisibility(View.VISIBLE);
  147. return  mGestureDetector.onTouchEvent(event);
  148. }
  149. //  @Override
  150. //  public boolean onTouchEvent(MotionEvent event) {
  151. //      // TODO Auto-generated method stub
  152. //      super.onTouchEvent(event);
  153. //
  154. //      Log.i(TAG, "onTouchEvent");
  155. //      // Set button visible
  156. //      mButton01.setVisibility(View.VISIBLE);
  157. //      mButton02.setVisibility(View.VISIBLE);
  158. //
  159. //      return true;
  160. //  }
  161. @Override
  162. public boolean onKeyDown(int keyCode, KeyEvent event) {
  163. // TODO Auto-generated method stub
  164. super.onKeyDown(keyCode, event);
  165. Log.i(TAG, "onKeyDown...");
  166. // Set button visible
  167. mButton01.setVisibility(View.VISIBLE);
  168. mButton02.setVisibility(View.VISIBLE);
  169. return true;
  170. }
  171. /* 图片缩小的method */
  172. private void small()    {
  173. int bmpWidth=bmp.getWidth();
  174. int bmpHeight=bmp.getHeight();
  175. Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);
  176. /* 设置图片缩小的比例 */
  177. double scale=0.8;
  178. /* 计算出这次要缩小的比例 */
  179. scaleWidth=(float) (scaleWidth*scale);
  180. scaleHeight=(float) (scaleHeight*scale);
  181. /* 产生reSize后的Bitmap对象 */
  182. Matrix matrix = new Matrix();
  183. matrix.postScale(scaleWidth, scaleHeight);
  184. Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,
  185. bmpHeight,matrix,true);
  186. if(id==0)      {
  187. /* 如果是第一次按,就删除原来默认的ImageView */
  188. layoutImage.removeView(mImageView);
  189. } else {
  190. /* 如果不是第一次按,就删除上次放大缩小所产生的ImageView */
  191. layoutImage.removeView((ImageView)findViewById(id));
  192. }
  193. /* 产生新的ImageView,放入reSize的Bitmap对象,再放入Layout中 */
  194. id++;
  195. ImageView imageView = new ImageView(this);
  196. imageView.setId(id);
  197. imageView.setImageBitmap(resizeBmp);
  198. layoutImage.addView(imageView);
  199. Log.i(TAG, "imageView.getWidth() = " + imageView.getWidth()
  200. + ", imageView.getHeight() = " + imageView.getHeight());
  201. setContentView(layout1);
  202. /* 因为图片放到最大时放大按钮会disable,所以在缩小时把它重设为enable */
  203. mButton02.setEnabled(true);
  204. mButton02.setTextColor(Color.MAGENTA);
  205. }
  206. /* 图片放大的method */
  207. private void big() {
  208. int bmpWidth=bmp.getWidth();
  209. int bmpHeight=bmp.getHeight();
  210. Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);
  211. /* 设置图片放大的比例 */
  212. double scale=1.25;
  213. /* 计算这次要放大的比例 */
  214. scaleWidth=(float)(scaleWidth*scale);
  215. scaleHeight=(float)(scaleHeight*scale);
  216. /* 产生reSize后的Bitmap对象 */
  217. Matrix matrix = new Matrix();
  218. matrix.postScale(scaleWidth, scaleHeight);
  219. Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,
  220. bmpHeight,matrix,true);
  221. if(id==0) {
  222. /* 如果是第一次按,就删除原来设置的ImageView */
  223. layoutImage.removeView(mImageView);
  224. } else {
  225. /* 如果不是第一次按,就删除上次放大缩小所产生的ImageView */
  226. layoutImage.removeView((ImageView)findViewById(id));
  227. }
  228. /* 产生新的ImageView,放入reSize的Bitmap对象,再放入Layout中 */
  229. id++;
  230. ImageView imageView = new ImageView(this);
  231. imageView.setId(id);
  232. imageView.setImageBitmap(resizeBmp);
  233. layoutImage.addView(imageView);
  234. setContentView(layout1);
  235. /* 如果再放大会超过屏幕大小,就把Button disable */
  236. if( scaleWidth * scale * bmpWidth > bmpWidth * 3 ||
  237. scaleHeight * scale * bmpHeight > bmpWidth * 3 ||
  238. scaleWidth * scale * bmpWidth > displayWidth * 5 ||
  239. scaleHeight * scale * bmpHeight > displayHeight * 5) {
  240. mButton02.setEnabled(false);
  241. mButton02.setTextColor(Color.GRAY);
  242. } else {
  243. mButton02.setEnabled(true);
  244. mButton02.setTextColor(Color.MAGENTA);
  245. }
  246. }
  247. }

display.xml文件

[xhtml] view plaincopy
  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. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:layout_weight="19"
  12. android:scrollbars="vertical"
  13. android:fadingEdge="vertical">
  14. <HorizontalScrollView
  15. android:layout_height="fill_parent"
  16. android:layout_width="wrap_content">
  17. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  18. android:orientation="horizontal"
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"
  21. android:gravity="center"
  22. android:id="@+id/layoutImage"
  23. >
  24. <ImageView
  25. android:id="@+id/myImageView"
  26. android:layout_width="fill_parent"
  27. android:layout_height="wrap_content"
  28. android:layout_weight="19"
  29. android:paddingTop="5dip"
  30. android:paddingBottom="5dip"
  31. />
  32. </LinearLayout>
  33. </HorizontalScrollView >
  34. </ScrollView>
  35. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  36. android:layout_width="fill_parent"
  37. android:layout_height="wrap_content"
  38. >
  39. <Button
  40. android:id="@+id/myButton1"
  41. android:layout_width="45dip"
  42. android:layout_height="30dip"
  43. android:layout_alignParentLeft="true"
  44. android:gravity="left"
  45. style="@style/my_style_button"
  46. android:visibility="gone"
  47. android:text="缩小"
  48. />
  49. <Button
  50. android:id="@+id/myButton2"
  51. android:layout_width="45dip"
  52. android:layout_height="30dip"
  53. android:layout_alignParentRight="true"
  54. android:gravity="right"
  55. style="@style/my_style_button"
  56. android:visibility="gone"
  57. android:text="放大"
  58. />
  59. </RelativeLayout>
  60. </FrameLayout>

版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 上一篇layout中设置图片自适应大小,并且设置最大宽高
  • 下一篇Java非静态内部类和静态内部类,访问父类的非静态和静态成员变量及成员函数
主题推荐
android图片imageviewvelocityboolean
猜你在找
Apple Watch开发入门
JavaScript for Qt Quick(QML)
反编译Android应用
APP内置IM 系统——从入门到千万级在线
网络赚钱靠谱项目推荐
Android支付接入一支付宝
分享45个android实例源码很好很强大收藏吧
Android Service 详解四开始停止service
android消息广播Intent传递数据
Android UI设计与开发第15期顶部标题栏六实现悬浮式顶部和底部标题栏效果
准备好了么? 跳吧             !更多职位尽在 CSDN JOB
移动-IOS开发工程师
北京爱奇艺科技有限公司

|

15-30K/月

我要跳槽

iOS开发工程师
上海彩亿信息技术有限公司

|

8-15K/月

我要跳槽

iOS
人民网股份有限公司

|

12-15K/月

我要跳槽

IOS工程师
路普达网络科技(北京)有限公司

|

10-20K/月

我要跳槽

id="ad_frm_0" frameborder="0" scrolling="no" src="http://blog.csdn.net/common/ad.html?t=4&containerId=ad_cen&frmId=ad_frm_0" style="border-width: 0px; overflow: hidden; width: 984px; height: 90px;">
查看评论
7楼 BinaryIsAll 2014-12-03 15:42发表 [回复]
坑了多少人,Matrix.postScale传入的参数是缩放比率,你传的是什么?
6楼 gxh9314 2013-12-16 15:37发表 [回复]
ImageId,找不到Source。代码不全,鉴定完毕
5楼 huhuaohua 2013-10-21 16:26发表 [回复]
能发整个工程看看吗
4楼 ameyume 2012-03-19 09:19发表 [回复]
可以用按钮缩放,不是拖动缩放。
3楼 sipolan 2012-03-15 17:53发表 [回复]
确实不行啊。。。好多错误啊。。。
2楼 cwjtojava 2012-02-20 14:41发表 [回复]
好像不行呢。
1楼 liangzl1986 2011-08-18 09:41发表 [回复]
效果图都不给一张啊哥子。
发表评论
  • 用 户 名:
  • Leaning_wk
  • 评论内容:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

id="ad_frm_1" frameborder="0" scrolling="no" src="http://blog.csdn.net/common/ad.html?t=5&containerId=ad_bot&frmId=ad_frm_1" style="border-width: 0px; overflow: hidden; width: 984px; height: 0px;">
核心技术类目
全部主题 Hadoop AWS 移动游戏 Java Android iOS Swift 智能硬件 Docker OpenStack VPN Spark ERP IE10Eclipse CRM JavaScript 数据库 Ubuntu NFC WAP jQuery BI HTML5 Spring Apache .NET API HTML SDK IISFedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTCcoremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech PerlTornado Ruby Hibernate ThinkPHP HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap

  • 个人资料
  •  
    ameyume
     
    • 访问:1410114次
    • 积分:15235
    • 等级: 
    • 排名:第294名
    • 原创:245篇
    • 转载:83篇
    • 译文:1篇
    • 评论:457条
  • 文章搜索
  • 博客专栏
  • Android多媒体

    文章:15篇

    阅读:118133

  • 文章分类
  • Android应用(102)
  • Android面试(1)
  • C/C++(36)
  • DRM(数字版权管理)(2)
  • java(26)
  • office(2)
  • Ubuntu/Linux(25)
  • vb(1)
  • VC/MFC(15)
  • 其他(4)
  • 计算机使用(5)
  • 面试(2)
  • 多媒体(23)
  • android多媒体(35)
  • android framework(24)
  • 随感(9)
  • cpu(1)
  • 手机使用(5)
  • Android Audio系统(10)
  • 数据库(7)
  • 图形图像(2)
  • C#(2)
  • QT(1)
  • 网络(3)
  • Android媒体扫描(3)
  • Android编译(2)
  • 电池状态 电池信息(1)
  • 文章存档
    • 2015年06月(1)
    • 2015年05月(3)
    • 2015年04月(1)
    • 2015年02月(1)
    • 2015年01月(1)
    • 展开
  • 阅读排行
  • Android Dialog用法(67979)
  • Android实现下载图片并保存到SD卡中(52033)
  • 视频码率,帧率和分辨率的联系与区别(49499)
  • QT开发环境安装配置教程(48509)
  • Android TextView属性详解(33307)
  • Android SystemProperties设置/取得系统属性的用法总结(27512)
  • Android实现图片放大缩小(26238)
  • 用Iterator实现遍历集合(21000)
  • Android通过onDraw实现在View中绘图操作(20289)
  • Android客户端与PC服务器通过socket进行交互实例(20017)
  • 评论排行
  • Android实现下载图片并保存到SD卡中(62)
  • Android客户端与PC服务器通过socket进行交互实例(49)
  • android和RTSP视频文件播放(一)(23)
  • Android Dialog用法(19)
  • ICS4.0.3创建NuPlayer的处理流程(12)
  • QT开发环境安装配置教程(12)
  • android手势操作滑动效果触摸屏事件处理(11)
  • java String的equals,intern方法(10)
  • Android个人所得税计算器(8)
  • Android实现秒表计时器的程序设计(8)
  • 推荐文章
  • id="ad_frm_2" frameborder="0" scrolling="no" src="http://blog.csdn.net/common/ad.html?t=12&containerId=ad_commend&frmId=ad_frm_2" style="border-width: 0px; overflow: hidden; width: 194px; height: 200px;">
  • 最新评论
  • 用Iterator实现遍历集合

    ouleioulei: 还不错,学习了

  • 用Iterator实现遍历集合

    tuspark2015: ArrayList的Iterator实现可以看这里的介绍:http://swiftlet.net/a...

  • Android客户端与PC服务器通过socket进行交互实例

    yanziz123: 为什么服务器一直都是S: Connecting...?哪位大神能给指点一二啊?谢谢谢谢

  • Android客户端与PC服务器通过socket进行交互实例

    yanziz123: 为什么服务器一直都是S: Connecting...?哪位大神能给指点一二啊?谢谢谢谢

  • android手势操作滑动效果触摸屏事件处理

    大左来自火星: 有没有完成的DEMO哦!!

  • Android客户端与PC服务器通过socket进行交互实例

    爱小谢: @lihongjie123:1055251337@qq.com好人一生平安,谢谢谢谢

  • Android客户端与PC服务器通过socket进行交互实例

    爱小谢: @lihongjie123:1055251337@qq.com好人一生平安,谢谢谢谢

  • Android实现秒表计时器的程序设计

    ice_eyes: 点击系统菜单再点击设置时间单位时,没有弹出时间单位设置的菜单,是不是switch里 SETTING_...

  • Android客户端与PC服务器通过socket进行交互实例

    HZDZKJDXchenpeng: 求份可运行代码,谢谢,2601349541@qq.com

  • 指针函数与函数指针

    某种意境: 好文,理解了。

  • 我的空间

    • Android源码下载方法
    • Downloading the Source Tree
    • MSM/QSD Android Enablement Project
    • Android Market
    • Android官方在线API
    • stackoverflow
    • http://code.google.com/p/android/issues/list
    • eoe Android API Guides
    • 中国移动终端测试网站
公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告|合作伙伴|论坛反馈
网站客服杂志客服微博客服webmaster@csdn.net400-600-2320|北京创新乐知信息技术有限公司 版权所有|江苏乐知网络技术有限公司 提供商务支持
京 ICP 证 070598 号|Copyright © 1999-2014, CSDN.NET, All Rights Reserved 

  src="http://zz.csdn.net/bin/logs.php" frameborder="0" width="0" height="0">

蓝蓝的天

蓝蓝的天,白云朵朵。 White clouds in the blue sky.

  • 目录视图
  • 摘要视图
  • 订阅
新版极客头条上线,每天一大波干货     任玉刚:Android开发者的职场规划     从零练就iOS高手实战班震撼来袭     新型数据库利弊谈    

Android实现图片放大缩小

分类: Android应用2010-12-21 14:05 26279人阅读 评论(7) 收藏 举报
androidlayoutbuttonactionvelocitydistance
[java] view plaincopy
  1. package com.min.Test_Gallery;
  2. import android.app.Activity;
  3. import android.graphics.Bitmap;
  4. import android.graphics.BitmapFactory;
  5. import android.graphics.Color;
  6. import android.graphics.Matrix;
  7. import android.os.Bundle;
  8. import android.util.DisplayMetrics;
  9. import android.util.Log;
  10. import android.view.GestureDetector;
  11. import android.view.KeyEvent;
  12. import android.view.MotionEvent;
  13. import android.view.View;
  14. import android.view.GestureDetector.OnGestureListener;
  15. import android.view.View.OnTouchListener;
  16. import android.widget.Button;
  17. import android.widget.FrameLayout;
  18. import android.widget.ImageView;
  19. import android.widget.LinearLayout;
  20. import android.widget.Toast;
  21. public class DisplayImage extends Activity implements OnTouchListener, OnGestureListener  {
  22. private static final String TAG = "DisplayImage";
  23. private static final int FLING_MIN_DISTANCE = 100;
  24. private static final int FLING_MIN_VELOCITY = 200;
  25. /* 相关变量声明 */
  26. private ImageView mImageView;
  27. private Button mButton01;
  28. private Button mButton02;
  29. private FrameLayout layout1;
  30. private LinearLayout layoutImage;
  31. private Bitmap bmp;
  32. private int id=0;
  33. private int displayWidth;
  34. private int displayHeight;
  35. private float scaleWidth=1;
  36. private float scaleHeight=1;
  37. private GestureDetector mGestureDetector;
  38. /** Called when the activity is first created. */
  39. @Override
  40. public void onCreate(Bundle savedInstanceState)    {
  41. super.onCreate(savedInstanceState);
  42. /* 加载display.xml Layout */
  43. setContentView(R.layout.display);
  44. /* 取得屏幕分辨率大小 */
  45. DisplayMetrics dm=new DisplayMetrics();
  46. getWindowManager().getDefaultDisplay().getMetrics(dm);
  47. displayWidth=dm.widthPixels;
  48. displayHeight=dm.heightPixels;
  49. /* 初始化相关变量 */
  50. Bundle bundle = this.getIntent().getExtras();
  51. Integer imageId = bundle.getInt("imageId");
  52. Log.i(TAG, "onCreate, imageId = " + imageId);
  53. bmp=BitmapFactory.decodeResource(getResources(), imageId);
  54. mImageView = (ImageView)findViewById(R.id.myImageView);
  55. mImageView.setImageBitmap(bmp);
  56. mImageView.setOnTouchListener(this);
  57. mImageView.setLongClickable(true);
  58. layout1 = (FrameLayout)findViewById(R.id.layout1);
  59. layoutImage = (LinearLayout)findViewById(R.id.layoutImage);
  60. mButton01 = (Button)findViewById(R.id.myButton1);
  61. mButton02 = (Button)findViewById(R.id.myButton2);
  62. /* 缩小按钮onClickListener */
  63. mButton01.setOnClickListener(new Button.OnClickListener() {
  64. @Override
  65. public void onClick(View v) {
  66. small();
  67. }
  68. });
  69. /* 放大按钮onClickListener */
  70. mButton02.setOnClickListener(new Button.OnClickListener() {
  71. @Override
  72. public void onClick(View v) {
  73. big();
  74. }
  75. });
  76. }
  77. // 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
  78. @Override
  79. public boolean onDown(MotionEvent e) {
  80. // TODO Auto-generated method stub
  81. //      Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();
  82. Log.i(TAG, "onDown...");
  83. return false;
  84. }
  85. /* 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN,
  86. * 多个ACTION_MOVE, 1个ACTION_UP触发
  87. * 参数解释:
  88. * e1:第1个ACTION_DOWN MotionEvent
  89. * e2:最后一个ACTION_MOVE MotionEvent
  90. * velocityX:X轴上的移动速度,像素/秒
  91. * velocityY:Y轴上的移动速度,像素/秒
  92. * 触发条件 :
  93. * X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
  94. * @see android.view.GestureDetector$OnGestureListener#onFling(android.view.MotionEvent, android.view.MotionEvent, float, float)
  95. */
  96. @Override
  97. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  98. float velocityY) {
  99. // TODO Auto-generated method stub
  100. Log.i(TAG, "onFling...");
  101. if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
  102. && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
  103. // Fling left
  104. Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();
  105. } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
  106. && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
  107. // Fling right
  108. Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();
  109. }
  110. return false;
  111. }
  112. // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
  113. @Override
  114. public void onLongPress(MotionEvent e) {
  115. // TODO Auto-generated method stub
  116. Log.i(TAG, "onLongPress...");
  117. }
  118. // 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
  119. @Override
  120. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
  121. float distanceY) {
  122. // TODO Auto-generated method stub
  123. Log.i(TAG, "onScroll...");
  124. return false;
  125. }
  126. // 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
  127. // 注意和onDown()的区别,强调的是没有松开或者拖动的状态
  128. @Override
  129. public void onShowPress(MotionEvent e) {
  130. // TODO Auto-generated method stub
  131. Log.i(TAG, "onShowPress...");
  132. }
  133. // 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
  134. @Override
  135. public boolean onSingleTapUp(MotionEvent e) {
  136. // TODO Auto-generated method stub
  137. Log.i(TAG, "onSingleTapUp...");
  138. return false;
  139. }
  140. @Override
  141. public boolean onTouch(View v, MotionEvent event) {
  142. // TODO Auto-generated method stub
  143. Log.i(TAG, "onTouch...");
  144. // Set button visible
  145. mButton01.setVisibility(View.VISIBLE);
  146. mButton02.setVisibility(View.VISIBLE);
  147. return  mGestureDetector.onTouchEvent(event);
  148. }
  149. //  @Override
  150. //  public boolean onTouchEvent(MotionEvent event) {
  151. //      // TODO Auto-generated method stub
  152. //      super.onTouchEvent(event);
  153. //
  154. //      Log.i(TAG, "onTouchEvent");
  155. //      // Set button visible
  156. //      mButton01.setVisibility(View.VISIBLE);
  157. //      mButton02.setVisibility(View.VISIBLE);
  158. //
  159. //      return true;
  160. //  }
  161. @Override
  162. public boolean onKeyDown(int keyCode, KeyEvent event) {
  163. // TODO Auto-generated method stub
  164. super.onKeyDown(keyCode, event);
  165. Log.i(TAG, "onKeyDown...");
  166. // Set button visible
  167. mButton01.setVisibility(View.VISIBLE);
  168. mButton02.setVisibility(View.VISIBLE);
  169. return true;
  170. }
  171. /* 图片缩小的method */
  172. private void small()    {
  173. int bmpWidth=bmp.getWidth();
  174. int bmpHeight=bmp.getHeight();
  175. Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);
  176. /* 设置图片缩小的比例 */
  177. double scale=0.8;
  178. /* 计算出这次要缩小的比例 */
  179. scaleWidth=(float) (scaleWidth*scale);
  180. scaleHeight=(float) (scaleHeight*scale);
  181. /* 产生reSize后的Bitmap对象 */
  182. Matrix matrix = new Matrix();
  183. matrix.postScale(scaleWidth, scaleHeight);
  184. Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,
  185. bmpHeight,matrix,true);
  186. if(id==0)      {
  187. /* 如果是第一次按,就删除原来默认的ImageView */
  188. layoutImage.removeView(mImageView);
  189. } else {
  190. /* 如果不是第一次按,就删除上次放大缩小所产生的ImageView */
  191. layoutImage.removeView((ImageView)findViewById(id));
  192. }
  193. /* 产生新的ImageView,放入reSize的Bitmap对象,再放入Layout中 */
  194. id++;
  195. ImageView imageView = new ImageView(this);
  196. imageView.setId(id);
  197. imageView.setImageBitmap(resizeBmp);
  198. layoutImage.addView(imageView);
  199. Log.i(TAG, "imageView.getWidth() = " + imageView.getWidth()
  200. + ", imageView.getHeight() = " + imageView.getHeight());
  201. setContentView(layout1);
  202. /* 因为图片放到最大时放大按钮会disable,所以在缩小时把它重设为enable */
  203. mButton02.setEnabled(true);
  204. mButton02.setTextColor(Color.MAGENTA);
  205. }
  206. /* 图片放大的method */
  207. private void big() {
  208. int bmpWidth=bmp.getWidth();
  209. int bmpHeight=bmp.getHeight();
  210. Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);
  211. /* 设置图片放大的比例 */
  212. double scale=1.25;
  213. /* 计算这次要放大的比例 */
  214. scaleWidth=(float)(scaleWidth*scale);
  215. scaleHeight=(float)(scaleHeight*scale);
  216. /* 产生reSize后的Bitmap对象 */
  217. Matrix matrix = new Matrix();
  218. matrix.postScale(scaleWidth, scaleHeight);
  219. Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,
  220. bmpHeight,matrix,true);
  221. if(id==0) {
  222. /* 如果是第一次按,就删除原来设置的ImageView */
  223. layoutImage.removeView(mImageView);
  224. } else {
  225. /* 如果不是第一次按,就删除上次放大缩小所产生的ImageView */
  226. layoutImage.removeView((ImageView)findViewById(id));
  227. }
  228. /* 产生新的ImageView,放入reSize的Bitmap对象,再放入Layout中 */
  229. id++;
  230. ImageView imageView = new ImageView(this);
  231. imageView.setId(id);
  232. imageView.setImageBitmap(resizeBmp);
  233. layoutImage.addView(imageView);
  234. setContentView(layout1);
  235. /* 如果再放大会超过屏幕大小,就把Button disable */
  236. if( scaleWidth * scale * bmpWidth > bmpWidth * 3 ||
  237. scaleHeight * scale * bmpHeight > bmpWidth * 3 ||
  238. scaleWidth * scale * bmpWidth > displayWidth * 5 ||
  239. scaleHeight * scale * bmpHeight > displayHeight * 5) {
  240. mButton02.setEnabled(false);
  241. mButton02.setTextColor(Color.GRAY);
  242. } else {
  243. mButton02.setEnabled(true);
  244. mButton02.setTextColor(Color.MAGENTA);
  245. }
  246. }
  247. }

display.xml文件

[xhtml] view plaincopy
  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. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:layout_weight="19"
  12. android:scrollbars="vertical"
  13. android:fadingEdge="vertical">
  14. <HorizontalScrollView
  15. android:layout_height="fill_parent"
  16. android:layout_width="wrap_content">
  17. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  18. android:orientation="horizontal"
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"
  21. android:gravity="center"
  22. android:id="@+id/layoutImage"
  23. >
  24. <ImageView
  25. android:id="@+id/myImageView"
  26. android:layout_width="fill_parent"
  27. android:layout_height="wrap_content"
  28. android:layout_weight="19"
  29. android:paddingTop="5dip"
  30. android:paddingBottom="5dip"
  31. />
  32. </LinearLayout>
  33. </HorizontalScrollView >
  34. </ScrollView>
  35. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  36. android:layout_width="fill_parent"
  37. android:layout_height="wrap_content"
  38. >
  39. <Button
  40. android:id="@+id/myButton1"
  41. android:layout_width="45dip"
  42. android:layout_height="30dip"
  43. android:layout_alignParentLeft="true"
  44. android:gravity="left"
  45. style="@style/my_style_button"
  46. android:visibility="gone"
  47. android:text="缩小"
  48. />
  49. <Button
  50. android:id="@+id/myButton2"
  51. android:layout_width="45dip"
  52. android:layout_height="30dip"
  53. android:layout_alignParentRight="true"
  54. android:gravity="right"
  55. style="@style/my_style_button"
  56. android:visibility="gone"
  57. android:text="放大"
  58. />
  59. </RelativeLayout>
  60. </FrameLayout>

版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 上一篇layout中设置图片自适应大小,并且设置最大宽高
  • 下一篇Java非静态内部类和静态内部类,访问父类的非静态和静态成员变量及成员函数
主题推荐
android图片imageviewvelocityboolean
猜你在找
Apple Watch开发入门
JavaScript for Qt Quick(QML)
反编译Android应用
APP内置IM 系统——从入门到千万级在线
网络赚钱靠谱项目推荐
Android支付接入一支付宝
分享45个android实例源码很好很强大收藏吧
Android Service 详解四开始停止service
android消息广播Intent传递数据
Android UI设计与开发第15期顶部标题栏六实现悬浮式顶部和底部标题栏效果
准备好了么? 跳吧             !更多职位尽在 CSDN JOB
移动-IOS开发工程师
北京爱奇艺科技有限公司

|

15-30K/月

我要跳槽

iOS开发工程师
上海彩亿信息技术有限公司

|

8-15K/月

我要跳槽

iOS
人民网股份有限公司

|

12-15K/月

我要跳槽

IOS工程师
路普达网络科技(北京)有限公司

|

10-20K/月

我要跳槽

id="ad_frm_0" frameborder="0" scrolling="no" src="http://blog.csdn.net/common/ad.html?t=4&containerId=ad_cen&frmId=ad_frm_0" style="border-width: 0px; overflow: hidden; width: 984px; height: 90px;">
查看评论
7楼 BinaryIsAll 2014-12-03 15:42发表 [回复]
坑了多少人,Matrix.postScale传入的参数是缩放比率,你传的是什么?
6楼 gxh9314 2013-12-16 15:37发表 [回复]
ImageId,找不到Source。代码不全,鉴定完毕
5楼 huhuaohua 2013-10-21 16:26发表 [回复]
能发整个工程看看吗
4楼 ameyume 2012-03-19 09:19发表 [回复]
可以用按钮缩放,不是拖动缩放。
3楼 sipolan 2012-03-15 17:53发表 [回复]
确实不行啊。。。好多错误啊。。。
2楼 cwjtojava 2012-02-20 14:41发表 [回复]
好像不行呢。
1楼 liangzl1986 2011-08-18 09:41发表 [回复]
效果图都不给一张啊哥子。
发表评论
  • 用 户 名:
  • Leaning_wk
  • 评论内容:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

id="ad_frm_1" frameborder="0" scrolling="no" src="http://blog.csdn.net/common/ad.html?t=5&containerId=ad_bot&frmId=ad_frm_1" style="border-width: 0px; overflow: hidden; width: 984px; height: 0px;">
核心技术类目
全部主题 Hadoop AWS 移动游戏 Java Android iOS Swift 智能硬件 Docker OpenStack VPN Spark ERP IE10Eclipse CRM JavaScript 数据库 Ubuntu NFC WAP jQuery BI HTML5 Spring Apache .NET API HTML SDK IISFedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTCcoremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech PerlTornado Ruby Hibernate ThinkPHP HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap

  • 个人资料
  •  
    ameyume
     
    • 访问:1410114次
    • 积分:15235
    • 等级: 
    • 排名:第294名
    • 原创:245篇
    • 转载:83篇
    • 译文:1篇
    • 评论:457条
  • 文章搜索
  • 博客专栏
  • Android多媒体

    文章:15篇

    阅读:118133

  • 文章分类
  • Android应用(102)
  • Android面试(1)
  • C/C++(36)
  • DRM(数字版权管理)(2)
  • java(26)
  • office(2)
  • Ubuntu/Linux(25)
  • vb(1)
  • VC/MFC(15)
  • 其他(4)
  • 计算机使用(5)
  • 面试(2)
  • 多媒体(23)
  • android多媒体(35)
  • android framework(24)
  • 随感(9)
  • cpu(1)
  • 手机使用(5)
  • Android Audio系统(10)
  • 数据库(7)
  • 图形图像(2)
  • C#(2)
  • QT(1)
  • 网络(3)
  • Android媒体扫描(3)
  • Android编译(2)
  • 电池状态 电池信息(1)
  • 文章存档
    • 2015年06月(1)
    • 2015年05月(3)
    • 2015年04月(1)
    • 2015年02月(1)
    • 2015年01月(1)
      展开
  • 阅读排行
  • Android Dialog用法(67979)
  • Android实现下载图片并保存到SD卡中(52033)
  • 视频码率,帧率和分辨率的联系与区别(49499)
  • QT开发环境安装配置教程(48509)
  • Android TextView属性详解(33307)
  • Android SystemProperties设置/取得系统属性的用法总结(27512)
  • Android实现图片放大缩小(26238)
  • 用Iterator实现遍历集合(21000)
  • Android通过onDraw实现在View中绘图操作(20289)
  • Android客户端与PC服务器通过socket进行交互实例(20017)
  • 评论排行
  • Android实现下载图片并保存到SD卡中(62)
  • Android客户端与PC服务器通过socket进行交互实例(49)
  • android和RTSP视频文件播放(一)(23)
  • Android Dialog用法(19)
  • ICS4.0.3创建NuPlayer的处理流程(12)
  • QT开发环境安装配置教程(12)
  • android手势操作滑动效果触摸屏事件处理(11)
  • java String的equals,intern方法(10)
  • Android个人所得税计算器(8)
  • Android实现秒表计时器的程序设计(8)
  • 推荐文章
  • id="ad_frm_2" frameborder="0" scrolling="no" src="http://blog.csdn.net/common/ad.html?t=12&containerId=ad_commend&frmId=ad_frm_2" style="border-width: 0px; overflow: hidden; width: 194px; height: 200px;">
  • 最新评论
  • 用Iterator实现遍历集合

    ouleioulei: 还不错,学习了

  • 用Iterator实现遍历集合

    tuspark2015: ArrayList的Iterator实现可以看这里的介绍:http://swiftlet.net/a...

  • Android客户端与PC服务器通过socket进行交互实例

    yanziz123: 为什么服务器一直都是S: Connecting...?哪位大神能给指点一二啊?谢谢谢谢

  • Android客户端与PC服务器通过socket进行交互实例

    yanziz123: 为什么服务器一直都是S: Connecting...?哪位大神能给指点一二啊?谢谢谢谢

  • android手势操作滑动效果触摸屏事件处理

    大左来自火星: 有没有完成的DEMO哦!!

  • Android客户端与PC服务器通过socket进行交互实例

    爱小谢: @lihongjie123:1055251337@qq.com好人一生平安,谢谢谢谢

  • Android客户端与PC服务器通过socket进行交互实例

    爱小谢: @lihongjie123:1055251337@qq.com好人一生平安,谢谢谢谢

  • Android实现秒表计时器的程序设计

    ice_eyes: 点击系统菜单再点击设置时间单位时,没有弹出时间单位设置的菜单,是不是switch里 SETTING_...

  • Android客户端与PC服务器通过socket进行交互实例

    HZDZKJDXchenpeng: 求份可运行代码,谢谢,2601349541@qq.com

  • 指针函数与函数指针

    某种意境: 好文,理解了。

  • 我的空间

    • Android源码下载方法
    • Downloading the Source Tree
    • MSM/QSD Android Enablement Project
    • Android Market
    • Android官方在线API
    • stackoverflow
    • http://code.google.com/p/android/issues/list
    • eoe Android API Guides
    • 中国移动终端测试网站

公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告|合作伙伴|论坛反馈
网站客服杂志客服微博客服webmaster@csdn.net400-600-2320|北京创新乐知信息技术有限公司 版权所有|江苏乐知网络技术有限公司 提供商务支持
京 ICP 证 070598 号|Copyright © 1999-2014, CSDN.NET, All Rights Reserved 

Android实现图片放大缩小相关推荐

  1. 41.Android之图片放大缩小学习

    生活中经常会用到图片放大和缩小,今天简单学习下. 思路:1.添加一个操作图片放大和缩小类;  2. 布局文件中引用这个自定义控件;  3. 主Activity一些修改. 代码如下: 增加图片操作类: ...

  2. android 图片放大缩小,android中图片放大缩小...

    ClickListener(){ public void onClick(View v){ big(); } }); } private void small(){ //获得Bitmap的高和宽 in ...

  3. 图片放大缩小旋转左移右移镜像倒影android

    图片放大缩小旋转左移右移镜像倒影 demo: TestImage 1. 将 meinv.jpg 图片拷贝到以下目录TestImage\app\src\main\res\mipmap-hdpi 1.An ...

  4. imageView图片放大缩小及旋转

    imageView图片放大缩小及旋转 一.简介 二.方法 1)设置图片放大缩小效果 第一步:将<ImageView>标签中的android:scaleType设置为"fitCen ...

  5. android 屏幕的放大缩小实现

    ios中 UIScrollView能很好的实现放大缩小功能,在anroid这里,scrollview并不能很好的支持放大缩小,而对于简单的图片放大,缩小,android可以使用 ZoomControl ...

  6. android photoview 图片放大缩放功能 ImageView

    转自:http://blog.csdn.net/aaawqqq/article/details/43128111 Android 图片浏览功能  图片放大缩小 使用 photoview 双击或双指缩放 ...

  7. css3 图片放大缩小闪烁效果

    直接把图片替换就可以了,我的图片是透明的,所以body设置为黑色的,不不要可以去掉 <!doctype html> <html lang="en"> < ...

  8. vue项目 一行js代码搞定点击图片放大缩小

    一行js代码搞定xue项目需要点击图片放大缩小,其实主要用的是用到了vue:class的动态切换,内容比较简单.一开始我把维护的需求想得太复杂了,和测试小姐姐聊了一下才反应过来. 两个月不到跟了四个项 ...

  9. iphone iPhone开发中如何将制作图片放大缩小代码实现案例

    1:原文摘自:http://mobile.51cto.com/iphone-285108.htm iPhone开发中如何将制作图片放大缩小案例是本文要介绍的内容,主要是来学习iphone开发中动画的制 ...

最新文章

  1. 把32位的SharePoint服务器场迁移到64位, 应该怎么做?
  2. python什么时候进入中国-python诞生于什么时候
  3. hdu 1853(Cyclic Tour)
  4. [python-图像处理]python图片处理技巧[基本操作]
  5. python 查看PIL包下的 Image.py 模块时 import _builtin__显示 python version 3.6 does not have module __builtin__
  6. 干旱对数据中心的影响
  7. 无法打开文件“libboost_python-vc120-mt-sgd-1_59.lib”
  8. C#编写程序操作数据库如何防止SQL注入漏洞的发生
  9. mysql 子查询代替_MySQL查询优化:用子查询代替非主键连接查询
  10. 男孩子初中毕业学计算机技术,男孩子初中毕业学什么技术好就业
  11. SharePoint 2013 Preview Single Server 评估环境安装与简单试用
  12. DLP Digital Light Procession 的缩写 数字光处理
  13. 服务端使用GZIP压缩数据
  14. 《实时控制软件设计》第二个编程作业
  15. 邻居表项的mcast_solicit数量
  16. 送给八年以前两年以后的自己
  17. dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
  18. 最近迅雷 4.0正式发布!教你轻松精简你的迅雷4.0~
  19. 100本软件开发最佳书籍排行榜
  20. WinInet库之Http通信

热门文章

  1. Android自带模拟器的安装
  2. 博通Broadcom系列网卡连接受限问题
  3. 基础——MCU的电源,复位和时钟系统(STM32为例)
  4. [读书笔记]Mindset
  5. 低电压检测IC(复位IC)
  6. 年薪50万以上的人,一般都是什么学历?怎么才能做到年薪50W?
  7. 【正点原子STM32连载】第五十一章 视频播放器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  8. 微软Windows系统发展史
  9. ftp上传 防火墙的设置
  10. windows防火墙设置_成都企业级网络防火墙