android图片拖动缩放

这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题有帮助。android大图片拖拽缩放这篇就不做过多介绍了,直接上源码:因为是大图片,在onDes

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题有帮助。android 大图片拖拽缩放

      

           这篇就不做过多介绍了,直接上源码:

 1 public class SpacePageActivity extends Activity {  2  3 private LinearLayout linnerLayout_spacepage;  4 private RelativeLayout relativeLayout_spacepage;  5 private Button btn_spacepage_back;  6 private Button btn_spacepage_save;  7 private static Boolean isTrue=false;  8  9 private static String IMAGE_MIME_TYPE ;  10  11 private ImageView image_spacePage;  12 private ProgressDialog dialog;  13 private Bitmap bitmap;  14  @Override  15 protected void onCreate(Bundle savedInstanceState) {  16 // TODO Auto-generated method stub   17 super.onCreate(savedInstanceState);  18 requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题   19  setContentView(R.layout.spacepage);  20  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  21  initHead();  22  23 if(isNetworkAvailable()){  24 image_spacePage=(ImageView) findViewById(R.id.image_spacepage);  25 btn_spacepage_save=(Button) findViewById(R.id.btn_spacepage_save);  26 image_spacePage.setOnTouchListener(new MulitPointTouchListener(image_spacePage));  27  image_spacePage.setScaleType(ScaleType.CENTER_INSIDE);  28  29 //加载成功 何问起  30 String urls="http://epaper.yzdsb.com.cn/201201/04/yz2104_7.jpg";  31 bitmap=returnBitMap(urls);  32 if(null!=bitmap){  33  image_spacePage.setImageBitmap(bitmap);  34  }  35  36  }  37  }  38  39  40 public Bitmap returnBitMap(String url) {  41  42 if(null==url || "".equals(url)){  43 return null;  44  }  45 URL myFileUrl = null;  46 Bitmap bitmap = null;  47 try {  48 myFileUrl = new URL(url);  49 } catch (MalformedURLException e) {  50  e.printStackTrace();  51  }  52 try {  53 HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();  54 conn.setConnectTimeout(2000);  55 conn.setDoInput(true);  56  conn.connect();  57 InputStream is = conn.getInputStream();  58 bitmap = BitmapFactory.decodeStream(is);  59  is.close();  60 } catch (IOException e) {  61  e.printStackTrace();  62  }  63  64  65  66 return bitmap;  67  }  68 // hovertree.com  69  70 public class MulitPointTouchListener implements OnTouchListener {  71  72 Matrix matrix = new Matrix();  73 Matrix savedMatrix = new Matrix();  74  75 public ImageView image;  76 static final int NONE = 0;  77 static final int DRAG = 1;  78 static final int ZOOM = 2;  79 int mode = NONE;  80  81 PointF start = new PointF();  82 PointF mid = new PointF();  83 float oldDist = 1f;  84  85  86 public MulitPointTouchListener(ImageView image) {  87 super();  88 this.image = image;  89  }  90  91  @Override  92 public boolean onTouch(View v, MotionEvent event) {  93 this.image.setScaleType(ScaleType.MATRIX);  94  95 ImageView view = (ImageView) v;  96 // dumpEvent(event);   97  98 switch (event.getAction() & MotionEvent.ACTION_MASK) {  99 100 case MotionEvent.ACTION_DOWN: 101 102 Log.w("FLAG", "ACTION_DOWN"); 103  matrix.set(view.getImageMatrix()); 104  savedMatrix.set(matrix); 105  start.set(event.getX(), event.getY()); 106 mode = DRAG; 107 break; 108 case MotionEvent.ACTION_POINTER_DOWN: 109 Log.w("FLAG", "ACTION_POINTER_DOWN"); 110 oldDist = spacing(event); 111 if (oldDist > 10f) { 112  savedMatrix.set(matrix); 113  midPoint(mid, event); 114 mode = ZOOM; 115  } 116 break; 117 case MotionEvent.ACTION_UP: 118 Log.w("FLAG", "ACTION_UP"); 119 case MotionEvent.ACTION_POINTER_UP: 120 Log.w("FLAG", "ACTION_POINTER_UP"); 121 mode = NONE; 122 break; 123 case MotionEvent.ACTION_MOVE: 124 Log.w("FLAG", "ACTION_MOVE"); 125 if (mode == DRAG) { 126  matrix.set(savedMatrix); 127 matrix.postTranslate(event.getX() - start.x, event.getY() 128 - start.y); 129 } else if (mode == ZOOM) { 130 float newDist = spacing(event); 131 if (newDist > 10f) { 132  matrix.set(savedMatrix); 133 float scale = newDist / oldDist; 134  matrix.postScale(scale, scale, mid.x, mid.y); 135  } 136  } 137 break; 138  } 139 140  view.setImageMatrix(matrix); 141 return true; 142  } 143 144 145 private float spacing(MotionEvent event) { 146 float x = event.getX(0) - event.getX(1); 147 float y = event.getY(0) - event.getY(1); 148 return FloatMath.sqrt(x * x + y * y); 149  } 150 151 private void midPoint(PointF point, MotionEvent event) { 152 float x = event.getX(0) + event.getX(1); 153 float y = event.getY(0) + event.getY(1); 154 point.set(x / 2, y / 2); 155  } 156  } 157 private void initHead() { 158 linnerLayout_spacepage = (LinearLayout) findViewById(R.id.linnerLayout_spacepage); 159 relativeLayout_spacepage=(RelativeLayout) findViewById(R.id.relativeLayout_spacepage); 160 btn_spacepage_back = (Button) findViewById(R.id.btn_spacepage_back); 161 btn_spacepage_back.setOnClickListener(new OnClickListener() { 162 163  @Override 164 public void onClick(View v) { 165 // TODO Auto-generated method stub  166 167  finish(); 168  } 169  }); 170 btn_spacepage_save = (Button) findViewById(R.id.btn_spacepage_save); 171 172  } 173 protected boolean isNetworkAvailable() { 174 ConnectivityManager connectivity = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 175 if (connectivity == null) { 176 Log.i("NetWorkState", "Unavailabel"); 177 return false; 178 } else { 179 NetworkInfo[] info = connectivity.getAllNetworkInfo(); 180 if (info != null) { 181 for (int i = 0; i < info.length; i++) { 182 if (info[i].getState() == NetworkInfo.State.CONNECTED) { 183 Log.i("NetWorkState", "Availabel"); 184 return true; 185  } 186  } 187  } 188  } 189 return false; 190  } 191  @Override 192 protected void onStop() { 193 // TODO Auto-generated method stub  194 if(bitmap!=null){ 195 if(!bitmap.isRecycled()){ 196 bitmap.recycle(); //回收图片所占的内存  197 bitmap=null; 198 System.gc(); //提醒系统及时回收  199  } 200  } 201 super.onStop(); 202 } 203  @Override 204 protected void onDestroy() { 205 // TODO Auto-generated method stub  206 super.onDestroy(); 207 if(bitmap!=null){ 208 if(!bitmap.isRecycled()){ 209 bitmap.recycle(); //回收图片所占的内存  210 bitmap=null; 211 System.gc(); //提醒系统及时回收  212  } 213  } 214  } 215 } 

因为是大图片,在onDestroy的时候要recycle掉,这样系统才会定时回收掉,System.gc();是提醒系统回收,虽然java这种垃圾回收机制不用我们自己关心对象的回收,但是这也给android开发人员带来了不好的一面,如果系统回收不及时很可能就造成了内存溢出了。什么时候手机不担心内存使用了就好了。

 

   运行一下看看效果:

android图片拖动缩放

 

android图片拖动缩放

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120575.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Xshell出现要继续使用此程序必须应用到最新的更新或使用新版本

    Xshell出现要继续使用此程序必须应用到最新的更新或使用新版本

  • CTK 插件框架介绍

    CTK 插件框架介绍CTKPluginFramework:IntroductionTheCTKPluginFrameworkcanshortlybedescribedasadynamiccomponentsystemforC++.CTK插件框架可以简要的描

  • discuz论坛更换域名,搬家步骤

    discuz论坛更换域名,搬家步骤搬家步骤具体如下:1、打包数据库文件保存到本地。2、打包网站根目录所有程序(discuz)保存到本地。3、上传网站程序包和数据库包到新的空间,将数据库上传到新的服务器中。4、找到config

  • 树莓派连接WiFi网络__2019.05.18

    树莓派连接WiFi网络__2019.05.18原文链接:http://sh.qihoo.com/pc/9ac657e0f6b386110?cota=4&tj_url=xz&sign=360_e39369d1&refer_scene=so_1工具/原料树莓派3代方法/步骤1:登录已经刷入系统的树莓派默认用户名pi密码raspberry方法/步骤2:登录系统以后我们使用ifconfig…

  • poe交换机跟普通交换机的区别_以太网交换机和poe交换机的区别

    poe交换机跟普通交换机的区别_以太网交换机和poe交换机的区别众所周知电气设备只有通电后才能工作,而一些基于IP网络的各种设备也同样需要供电才能使用,自从有了poe供电技术后IP网络设备就又多了一种供电方式。那么具体poe工业以太网交换机可以当普通工业以太网交换机用吗,poe工业以太网交换机有哪些优势呢?poe工业以太网交换机可以当普通工业以太网交换机用吗poe工业以太网交换机的可以当作普通工业以太网交换机来用的,不过必要是正规厂商生成的支持802.3at/af协议的poe工业以太网交换机,因为这些poe工业以太网交换机在供电前会先提供1个低电压检测前..

  • android打开相机拍照及打开相册选择照片「建议收藏」

    android打开相机拍照及打开相册选择照片「建议收藏」照相机拍照Intentintent=newIntent();intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//照相机拍照//需要说明一下,以下操作使用照相机拍照,//拍照后的图片会存放在相册中的,这里使用的这种方式有一个好处就是获取的图片是拍照后的原图,//如果不实用Cont

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号