android图片拖动缩放

这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题有帮助。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开发人员带来了不好的一面,如果系统回收不及时很可能就造成了内存溢出了。什么时候手机不担心内存使用了就好了。

运行一下看看效果:

时间: 2024-08-18 15:50:30

android图片拖动缩放的相关文章

Android图片旋转,缩放,位移,倾斜,对称完整示例(二)——Bitmap.createBitmap()和Matrix

MainActivity如下: package cc.c; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.widget.ImageView; /** * Demo描述: * 利用B

Android图片旋转,缩放,位移,倾斜,对称完整示例(一)——imageView.setImageMatrix(matrix)和Matrix

MainActivity如下: import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; import android.app.Activity; import android.graphics.Matrix; /** * Demo描述:

Android图片的缩放效果

一.概述 Android 图片要实现:手势滑动,双击变大,多点触控的效果. 其实是有一定难度的,我们需要用Matrix ,GestureDetector 等等需要完成一个复杂的逻辑才能实现,然而今天我要说的并不是这种方法,而是一个第三方库Photoview,它使得完成图片缩放工作只需要3-5行代码就搞定了. 是不是很爽... 二.使用方法 github:https://github.com/chrisbanes/PhotoView 如果用AS需在引入如下库文件(目前是最新的): dependen

Android图片处理--缩放

PS:在开发中我们会遇到一些图片处理问题,比如说缓存图片了.限制图片大小了.查看图片了等.上一篇文章介绍了图片的全景效果查看,今天介绍一个图片缩放,我们如果有时间的话,可以自己写一个属于自己的库,里面会用到view的按压.事件分发.手势等一些知识,如果没有时间或者不会其他的方法,不妨来看看这个PhotoView.这是一个图片缩放库,对于这样的还有GitView等,下面我就介绍一些用法. 功能: 正常加载图片 双击放大 手势随意缩放 随意拖动查看图片每一个角落 结合其他设置可实现翻转 效果图 1:

Android图片旋转,缩放,位移,倾斜,对称完整演示样例(一)——imageView.setImageMatrix(matrix)和Matrix

MainActivity例如以下: import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; import android.app.Activity; import android.graphics.Matrix; /** * Demo描

Android 图片拖动

public class TestDemo extends Activity { private ImageView img1; private int screenWidth; private int screenHeight; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst

[android] 图片的缩放

界面布局,线性布局,竖直排列,两个ImageView 获取到两个ImageView对象 调用BitmapFactory.decodeResource(res,id)方法,获取Bitmap对象 参数:res是getResource(),id是资源id比如:R.drawable.xxx 调用ImageView对象的setImageViewBitmap(),参数:Bitmap对象 获取可编辑的Bitmap对象 调用Bitmap对象的createBitmap(width,height,config)方法

Android仿微信朋友圈图片浏览器(支持图片手势缩放,拖动)

※效果 ※使用到的开源库 PhotoView 图片缩放:支持双击缩放,手指捏拉缩放 https://github.com/chrisbanes/PhotoView Universalimageloader 图片下载缓存库 https://github.com/nostra13/Android-Universal-Image-Loader ViewPagerIndicator 分页指示器 https://github.com/JakeWharton/Android-ViewPagerIndicat

Android实现图片的缩放和拖动

概述:通过自定义ImageView控件,在xml布局里面调用自定的组件实现图片的缩放. /** * 自定义的ImageView控制,可对图片进行多点触控缩放和拖动 * * @author qiuwanyong */ public class MyImageView extends ImageView { /** * 初始化状态常量 */ public static final int STATUS_INIT = 1; /** * 图片放大状态常量 */ public static final i