博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android图片拖动缩放
阅读量:7103 次
发布时间:2019-06-28

本文共 8898 字,大约阅读时间需要 29 分钟。

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

 

   运行一下看看效果:

 

 

转载于:https://www.cnblogs.com/roucheng/p/androidtuozhuai.html

你可能感兴趣的文章
情绪板携手视觉设计
查看>>
Atitit.php nginx页面空白 并返回500的解决
查看>>
http://blog.csdn.net/LANGXINLEN/article/details/50421988
查看>>
PHP高效率写法(详解原因)
查看>>
Swift 值类型/引用类型
查看>>
【WPF】点击滑动条(Slider),移动滑块(Tick)到鼠标点击的位置
查看>>
[每天五分钟,备战架构师-9]数据库系统
查看>>
[转]WinForm和WebForm下读取app.config web.config 中邮件配置的方法
查看>>
HDU-1903 Exchange Rates
查看>>
ado.net entity framework使用odp.net(ODAC for .net)连接oracle11g体验
查看>>
svn怎么版本还原?
查看>>
ABP源码分析三十七:ABP.Web.Api Script Proxy API
查看>>
Quartz 定时任务管理
查看>>
大公司都有哪些开源项目~~~简化版
查看>>
java生成word的完美解决方案
查看>>
ubuntu使用记录
查看>>
java生成zip压缩文件,解压缩文件
查看>>
我的Ajax服务端框架 - 安全问题,初始化设置,实现原理
查看>>
一位程序员的十个忠告
查看>>
[转]代理(Proxy)和委派(Delegate)的区别
查看>>