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;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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;}@Overridepublic 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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubfinish();}});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;}@Overrideprotected void onStop() {// TODO Auto-generated method stubif (bitmap != null) {if (!bitmap.isRecycled()) {bitmap.recycle(); // 回收图片所占的内存bitmap = null;System.gc(); // 提醒系统及时回收}}super.onStop();}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if (bitmap != null) {if (!bitmap.isRecycled()) {bitmap.recycle(); // 回收图片所占的内存bitmap = null;System.gc(); // 提醒系统及时回收}}}}
因为是大图片,在onDestroy的时候要recycle掉,这样系统才会定时回收掉,System.gc();是提醒系统回收,虽然java这种垃圾回收机制不用我们自己关心对象的回收,但是这也给android开发人员带来了不好的一面,如果系统回收不及时很可能就造成了内存溢出了。什么时候手机不担心内存使用了就好了。 





详细出处参考:http://www.jb51.net/article/32972.htm
















更多相关文章

  1. Android 原始下载图片 通过HTTp
  2. Android:下载网络图片
  3. android ScrollView 多张图片之间有空白
  4. android 获取系统资源
  5. android从网上下载图片
  6. Android图片上传工具类
  7. Android使用系统API进行音视频编码

随机推荐

  1. android 获取包名 通过包名获取应用签名
  2. Android中ListView的使用及优化
  3. ffmpeg在android平台上的移植
  4. Android怎么让toast在屏幕顶部显示
  5. 2011.09.01(4)——— android 应用程序跳转
  6. android webview模拟网页post操作
  7. android scrollview嵌套listview出现高度
  8. Android(安卓)HAL:helloworld例程
  9. 解决jdk1.6已经安装,编译android源码报错
  10. Android中音频文件的使用