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图片拖动缩放

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kafka重复消费解决方案_kafka重复消费原因

    kafka重复消费解决方案_kafka重复消费原因前面博客小编向大家分享了kafka如何保证消息不丢失?,基本是从producer和broker来分析的,producer要支持重试和acks,producer要做好副本和及时刷盘落地。这篇博客呢,就跟大家一起聊一下kafka消费者如何消费的?如何避免重复消费?消费流程:一般我们消费测试是不会变的,都使用默认的,也就是第一种,range策略。默认策略,保证基本是均衡的。计算公式:n=分区数/消费者数m=分区数%消费者数前m个消费者,消费n+1个,剩余的消费n个eg:12个par

    2022年10月10日
    0
  • HBase面试题总结1「建议收藏」

    HBase面试题总结1「建议收藏」hbase的特点是什么??1)hbase是一个分布式的基于列式存储的数据库,基于Hadoop的hdfs存储,zookeeper管理。2)hbase适合存储半结构化和非结构化数据,对于结构化数据字段不够确定或者杂乱无章很难按一个概念去抽取数据;3)hbase为空的纪录不会被存储;4)基于的表包含rowkey,时间戳,列族,新写入数据时,时间戳更新,同时可以查询到以前的版本;5)hbase是…

    2022年5月8日
    50
  • UML旅游管理系统「建议收藏」

    UML旅游管理系统「建议收藏」一、需求概述1.1项目概述随着人们的生活质量的逐步提高,外出旅游成为人们生活中不可或缺的一项活动。开发一个旅游管理系统可以为大家提供便捷的途径。系统管理员可以发布和管理旅行路线。旅客可以查询路线,预定路线。1.2用户需求分析分析的系统的参与者有系统管理员、会员、普通用户三个群体。分别对三个群体的需求进行具体分析。系统管理员:管理员作为系统的管理者。需要对线路的数据库进行管理。比如发布新的线路,对不需要的线路进行删除、修改线路的具体信息。对于已经发布的线路,系统管理员可以查看预定的情况。同

    2022年6月12日
    27
  • [GBA ROM列表]不断补完中……

    [GBA ROM列表]不断补完中……出处:http://www.ezflash.cn/vbb/showthread.php?s=3a42901b8c2aacb56a02e61f690b8a05&threadid=14&perpage=15&pagenumber=10001-F-Zero(J)(最高时速)(J)RCG320002-SuperMarioAdvance(J)(超级马里奥A)(J)ACT32000

    2022年7月11日
    74
  • c语言里void什么作用,C语言中void是什么意思?

    c语言里void什么作用,C语言中void是什么意思?C语言中void是什么意思?C语言中“void”表示为无类型,相应的“void*”为无类型指针,常用在程序编写中对定义函数的参数类型、返回值、函数中指针类型进行声明,其作用是对函数返回和参数的进行限定。C语言关键字auto:声明自动变量break:跳出当前循环case:开关语句分支char:声明字符型变量或函数返回值类型const:声明只读变量continue:结束当前循环,开始下一轮循环…

    2022年5月12日
    51
  • docker下Jenkins的部署和升级「建议收藏」

    docker下Jenkins的部署和升级「建议收藏」获取Jenkins镜像dockersearchjenkinsdockerpulljenkinsdockerimages创建映射目录mkdir-p/var/jenkins_homechown-R1000:1000/var/jenkins_home启动jenkins镜像sudodockerrun-itd-p8080:8080-p50000:50000–namejenkins–privileged=true-v/home/jenkins_

    2022年5月15日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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