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)


相关推荐

  • 微信小程序——图片识别

    微信小程序——图片识别我的微信小程序期末大作业——基于百度大脑API的图片识别小程序具体实现了动物识别、植物识别、车辆识别三个功能实验源码已经放到了我的GitHub,欢迎测试修改下面给大家分享该项目的实验报告????目录1概述1.1课程大作业目的与要求1.2课程大作业简介2设计思路2.1图片识别API2.2微信小程序UI框架3设计方案4设计过程4.1百度开放平台注册4.2获取asscee_…

  • JavaSwing_1.2: GridLayout(网格布局)

    JavaSwing_1.2: GridLayout(网格布局)GridLayout,网格布局管理器。它以矩形网格形式对容器的组件进行布置,把容器按行列分成大小相等的矩形网格,一个网格中放置一个组件,组件宽高自动撑满网格。以行数和总数优先:通过构造方法或setRows和setColumns方法将行数和列数都设置为非零值时,指定的列数将被忽略。列数通过指定的行数和布局中的组件总数来确定。因此,例如,如果指定了三行和两列,在布局中添加了九个组件,则它们将显示为三行三列。

  • 千兆以太网在国产FPGA(智多晶)上的实现[通俗易懂]

    千兆以太网在国产FPGA(智多晶)上的实现[通俗易懂]**千兆以太网在国产FPGA(智多晶)上的实现闲来无事,想了想写点东西,顺带着记录一下自己学习的过程,其中千兆以太网这个模块是之前的一个项目任务,已经实现,但是想着自己在这里面也遇到过许多坑,所以写点东西,避免后来者遇到相同的问题,以后尽量避免事后总结,要做到边做边总结;在2020年国产化的大趋势下,国产芯片开始发展,在这样的时代背景下,我开始了千兆以太网的学习;实现的是简单千兆以太网的实现,利用udp协议、arp协议等千兆以太网的通信,在介绍具体操作流程的过程前,我先介绍一下千兆以太网的设计框架,

  • 深度学习 | 三个概念:Epoch, Batch, Iteration

    深度学习 | 三个概念:Epoch, Batch, Iteration

  • Java——JDBC连接数据库(步骤详解!!!)

    Java——JDBC连接数据库(步骤详解!!!)JDBC的全称是:JavaDatabaseConnectivity,即Java数据库连接。JDBC可以通过载入不同的数据库的“驱动程序”而与不同的数据库进行连接。那么,在数据库连接的时候,我使用的是MySQL,Java集成开发环境是Eclipse。要使用JDBC来访问MySQL数据库,首先需要添加MySQL数据库驱动程序。下面,我来为大家讲解一下这其中的步骤(听着名字很高大上,但仔细看步骤会觉得其实没那么难!!!)????????????Step1:www.mysql.co

  • https加密原理(转)

    https加密原理(转)HTTP、HTTPS在我们日常开发中是经常会接触到的。我们也都知道,一般Android应用开发,在请求API网络接口的时候,很多使用的都是HTTP协议;使用浏览器打开网页,也是利用HTTP协议。看来HTTP真是使用广泛啊,但是,HTTP是不安全的。利用网络抓包工具就可以知道传输中的内容,一览无余。比如我经常会使用Fiddler来抓包,搜集一些有趣的API接口。那么…

发表回复

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

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