激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - android 大圖片拖拽并縮放實現原理

android 大圖片拖拽并縮放實現原理

2020-12-28 10:56Android教程網 Android

android 大圖片拖拽縮放有利于用戶體驗,在開發過程中經常使用到,這篇圖片拖拽縮放也是我在項目中用到的,今天整理一下,將源碼奉獻給大家,希望對大家以后碰到相似的問題有幫助

由于最近項目忙,博客一直沒有時間更新,今天有點時間就連續更新兩篇吧,過過癮。

這篇圖片拖拽縮放也是我在項目中用到的,今天整理一下,將源碼奉獻給大家,希望對大家以后碰到相似的問題有幫助。

這篇就不做過多介紹了,直接上源碼:

復制代碼 代碼如下:

public class spacepageactivity extends activity {

private linearlayout linnerlayout_spacepage;
private relativelayout relativelayout_spacepage;
private button btn_spacepage_back;
private button btn_spacepage_save;
private static boolean istrue=false;

private static string image_mime_type ;

private imageview image_spacepage;
private progressdialog dialog;
private bitmap bitmap;
@override
protected void oncreate(bundle savedinstancestate) {
// todo auto-generated method stub
super.oncreate(savedinstancestate);
requestwindowfeature(window.feature_no_title);//隱藏標題
setcontentview(r.layout.spacepage);
setrequestedorientation(activityinfo.screen_orientation_landscape);
inithead();

if(isnetworkavailable()){
image_spacepage=(imageview) findviewbyid(r.id.image_spacepage);
btn_spacepage_save=(button) findviewbyid(r.id.btn_spacepage_save);
image_spacepage.setontouchlistener(new mulitpointtouchlistener(image_spacepage));
image_spacepage.setscaletype(scaletype.center_inside);

//加載成功
string urls="http://epaper.yzdsb.com.cn/201201/04/yz2104_7.jpg";
bitmap=returnbitmap(urls);
if(null!=bitmap){
image_spacepage.setimagebitmap(bitmap);
}

}
}


public bitmap returnbitmap(string url) {

if(null==url || "".equals(url)){
return null;
}
url myfileurl = null;
bitmap bitmap = null;
try {
myfileurl = new url(url);
} catch (malformedurlexception e) {
e.printstacktrace();
}
try {
httpurlconnection conn = (httpurlconnection) myfileurl.openconnection();
conn.setconnecttimeout(2000);
conn.setdoinput(true);
conn.connect();
inputstream is = conn.getinputstream();
bitmap = bitmapfactory.decodestream(is);
is.close();
} catch (ioexception e) {
e.printstacktrace();
}



return bitmap;
}
public class mulitpointtouchlistener implements ontouchlistener {

matrix matrix = new matrix();
matrix savedmatrix = new matrix();

public imageview image;
static final int none = 0;
static final int drag = 1;
static final int zoom = 2;
int mode = none;

pointf start = new pointf();
pointf mid = new pointf();
float olddist = 1f;


public mulitpointtouchlistener(imageview image) {
super();
this.image = image;
}

@override
public boolean ontouch(view v, motionevent event) {
this.image.setscaletype(scaletype.matrix);

imageview view = (imageview) v;
// dumpevent(event);

switch (event.getaction() & motionevent.action_mask) {

case motionevent.action_down:

log.w("flag", "action_down");
matrix.set(view.getimagematrix());
savedmatrix.set(matrix);
start.set(event.getx(), event.gety());
mode = drag;
break;
case motionevent.action_pointer_down:
log.w("flag", "action_pointer_down");
olddist = spacing(event);
if (olddist > 10f) {
savedmatrix.set(matrix);
midpoint(mid, event);
mode = zoom;
}
break;
case motionevent.action_up:
log.w("flag", "action_up");
case motionevent.action_pointer_up:
log.w("flag", "action_pointer_up");
mode = none;
break;
case motionevent.action_move:
log.w("flag", "action_move");
if (mode == drag) {
matrix.set(savedmatrix);
matrix.posttranslate(event.getx() - start.x, event.gety()
- start.y);
} else if (mode == zoom) {
float newdist = spacing(event);
if (newdist > 10f) {
matrix.set(savedmatrix);
float scale = newdist / olddist;
matrix.postscale(scale, scale, mid.x, mid.y);
}
}
break;
}

view.setimagematrix(matrix);
return true;
}


private float spacing(motionevent event) {
float x = event.getx(0) - event.getx(1);
float y = event.gety(0) - event.gety(1);
return floatmath.sqrt(x * x + y * y);
}

private void midpoint(pointf point, motionevent event) {
float x = event.getx(0) + event.getx(1);
float y = event.gety(0) + event.gety(1);
point.set(x / 2, y / 2);
}
}
private void inithead() {
linnerlayout_spacepage = (linearlayout) findviewbyid(r.id.linnerlayout_spacepage);
relativelayout_spacepage=(relativelayout) findviewbyid(r.id.relativelayout_spacepage);
btn_spacepage_back = (button) findviewbyid(r.id.btn_spacepage_back);
btn_spacepage_back.setonclicklistener(new onclicklistener() {

@override
public void onclick(view v) {
// todo auto-generated method stub

finish();
}
});
btn_spacepage_save = (button) findviewbyid(r.id.btn_spacepage_save);

}
protected boolean isnetworkavailable() {
connectivitymanager connectivity = (connectivitymanager)getsystemservice(context.connectivity_service);
if (connectivity == null) {
log.i("networkstate", "unavailabel");
return false;
} else {
networkinfo[] info = connectivity.getallnetworkinfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getstate() == networkinfo.state.connected) {
log.i("networkstate", "availabel");
return true;
}
}
}
}
return false;
}
@override
protected void onstop() {
// todo auto-generated method stub
if(bitmap!=null){
if(!bitmap.isrecycled()){
bitmap.recycle(); //回收圖片所占的內存
bitmap=null;
system.gc(); //提醒系統及時回收
}
}
super.onstop();
}
@override
protected void ondestroy() {
// todo auto-generated method stub
super.ondestroy();
if(bitmap!=null){
if(!bitmap.isrecycled()){
bitmap.recycle(); //回收圖片所占的內存
bitmap=null;
system.gc(); //提醒系統及時回收
}
}
}
}


因為是大圖片,在ondestroy的時候要recycle掉,這樣系統才會定時回收掉,system.gc();是提醒系統回收,雖然java這種垃圾回收機制不用我們自己關心對象的回收,但是這也給android開發人員帶來了不好的一面,如果系統回收不及時很可能就造成了內存溢出了。什么時候手機不擔心內存使用了就好了。

 

 

運行一下看看效果:

android 大圖片拖拽并縮放實現原理

 

android 大圖片拖拽并縮放實現原理

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: sm高h视频| 久久久久久久久久久av | 久久久www成人免费精品 | 国产精品久久久久久久四虎电影 | 日韩黄在线 | 九九视频精品在线观看 | 久久久久久久一区 | 国产精品成人一区二区三区电影毛片 | 日本www黄色 | 欧美成人一级 | 国产在线一级视频 | av色哟哟 | 91九色网 | 永久av在线免费观看 | 国产一区二区三区视频免费 | 成人在线视频免费播放 | 黄色片网页 | 911精品影院在线观看 | 国产一区二区三区在线免费 | 蜜桃视频在线免费播放 | 久久99国产伦子精品免费 | 欧美一级淫片a免费播放口 91九色蝌蚪国产 | 国产毛片自拍 | 中文字幕在线观看1 | 高清av免费| 免费国产自久久久久三四区久久 | 欧美一级毛片免费观看 | 久久精品视频日本 | 亚洲一二区精品 | 久色免费视频 | 91高清在线免费观看 | 日本高清视频网站www | 精品欧美一区二区精品久久小说 | 久久精品日产高清版的功能介绍 | 九九视屏 | 精品欧美一区二区精品久久小说 | 精品av在线播放 | av在线更新 | asian裸体佳人pics | 九九热精品免费 | www.91sese|