麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 系統(tǒng) > Android > 正文

android 大圖片拖拽并縮放實(shí)現(xiàn)原理

2020-04-11 12:37:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

由于最近項(xiàng)目忙,博客一直沒(méi)有時(shí)間更新,今天有點(diǎn)時(shí)間就連續(xù)更新兩篇吧,過(guò)過(guò)癮。

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

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

復(fù)制代碼 代碼如下:

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);//隱藏標(biāo)題
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(); //回收?qǐng)D片所占的內(nèi)存
bitmap=null;
System.gc(); //提醒系統(tǒng)及時(shí)回收
}
}
super.onStop();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(bitmap!=null){
if(!bitmap.isRecycled()){
bitmap.recycle(); //回收?qǐng)D片所占的內(nèi)存
bitmap=null;
System.gc(); //提醒系統(tǒng)及時(shí)回收
}
}
}
}

因?yàn)槭谴髨D片,在onDestroy的時(shí)候要recycle掉,這樣系統(tǒng)才會(huì)定時(shí)回收掉,System.gc();是提醒系統(tǒng)回收,雖然java這種垃圾回收機(jī)制不用我們自己關(guān)心對(duì)象的回收,但是這也給android開(kāi)發(fā)人員帶來(lái)了不好的一面,如果系統(tǒng)回收不及時(shí)很可能就造成了內(nèi)存溢出了。什么時(shí)候手機(jī)不擔(dān)心內(nèi)存使用了就好了。

運(yùn)行一下看看效果:


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美黄色大片免费观看 | 深夜福利视频绿巨人视频在线观看 | 好吊色欧美一区二区三区四区 | 99麻豆久久久国产精品免费 | 精品国产乱码一区二区 | 国产精品视频成人 | 毛片大全在线观看 | 久久久成人动漫 | 羞羞草视频 | 干色视频 | 亚洲一区二区在线免费 | 亚洲最大中文字幕 | 欧洲狠狠鲁 | 免费黄色入口 | 91女上位 在线播放 性欧美日本 | 国产午夜精品一区二区三区免费 | 久久久久久91 | 国产1区在线 | 欧美一级久久 | 国产电影av在线 | 久久久毛片视频 | 黄色影院在线看 | 色av综合在线 | 久久久久久免费 | 国产精品视频亚洲 | 色域tv| 欧洲伊人网 | 黄色片在线观看网站 | 中文字幕在线播放一区 | 羞羞答答xxdd在线播放 | 成人毛片网 | 国产一级毛片国产 | 久久狠狠高潮亚洲精品 | 在线91视频| 精品国产91久久久久久久 | 日韩视频―中文字幕 | 久草在线免费资源站 | 深夜免费视频 | 操皮视频 | 国产成人精品免费视频大全办公室 | 亚洲激情91|