国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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 大圖片拖拽并縮放實現原理

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲一区免费观看 | 日日鲁鲁 | 亚洲激情网站 | 黄视频免费观看 | 羞羞视频在线看 | 91精品国产91久久久久久最新 | 免费看毛片的网站 | 欧洲一区二区在线观看 | 日韩精品在线一区 | 91精品国产乱码久久久久久久久 | 亚洲一区二区国产 | 婷婷综合五月天 | 日韩中文字幕在线播放 | 欧美成人激情视频 | 激情欧美一区二区免费视频 | 亚洲一区电影 | 日韩 欧美 中文 | 亚洲成人一区二区三区四区 | 久草免费在线视频 | 色乱码一区二区三区网站 | 依人在线 | av成人免费 | 久久久久这里只有精品 | 日韩电影免费在线观看中文字幕 | 亚洲 精品 综合 精品 自拍 | 免费在线观看毛片 | 国产精品久久久久一区二区三区 | 成人国产精品 | 黄色在线免费观看 | 色吊丝在线永久观看最新版本 | 亚洲最新无码中文字幕久久 | 欧美激情亚洲 | 黄色三级网站在线观看 | 久久久久久久久国产 | 91免费在线视频观看 | 在线成人av | 久久久久久精 | 国产一区二区三区视频在线观看 | 91精品国产综合久久小仙女陆萱萱 | 一级毛片黄 | 日本久草|