click image to full screen, click again back to original

/* 取得屏幕分辨率大小 */

    DisplayMetrics dm=new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    displayWidth=dm.widthPixels;
    /* 屏幕高度须扣除下方Button高度 */
    displayHeight=dm.heightPixels-80;
android获取网络图片主要是把网络图片的数据流读入到内存中然后用 Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length);
方法来将图片流传化为bitmap类型 这样才能用到
ImageView中ScaleType属性
  • XML文件中设置android:scaleType属性。
  • 代码中使用函数setScaleType(ScaleType scaleType)来设定
CENTER /center  按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
CENTER_CROP / centerCrop  按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
FIT_CENTER / fitCenter  把图片按比例扩大/缩小到View的宽度居中显示
FIT_END / fitEnd   把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
FIT_START / fitStart  把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
FIT_XY / fitXY  把图片不按比例 扩大/缩小到View的大小显示
MATRIX / matrix 用矩阵来绘制
通过BitmapFactory.decodeFile(Stringpath)方法将突破转成Bitmap时,遇到大一些的图片,我们经常会遇到OOM(Out Of Memory)的问题
BitmapFactory.Options这个类,有一个字段叫做 inJustDecodeBounds,如果我们把它设为true,那么BitmapFactory.decodeFile(Stringpath, Options opt)并不会真的返回一个Bitmap给你,它仅仅会把它的宽,高取回来给你,这样就不会占用太多的内存,也就不会那么频繁的发生OOM了。

BitmapFactory.Options options = newBitmapFactory.Options();

options.inJustDecodeBounds = true;

Bitmap bmp = BitmapFactory.decodeFile(path,options); /* 这里返回的bmp是null */

这段代码之后,options.outWidthoptions.outHeight就是我们想要的宽和高了。

图片不变形的前提下得到宽度为200的缩略图

int height = options.outHeight * 200 /options.outWidth;

options.outWidth = 200;

options.outHeight = height;

/* 这样才能真正的返回一个Bitmap给你 */

options.inJustDecodeBounds = false;

Bitmap bmp = BitmapFactory.decodeFile(path,options);

image.setImageBitmap(bmp);

在执行BitmapFactory.decodeFile(path,options);时,并没有节约内存。要想节约内存,还需要用到BitmapFactory.Options这个类里的 inSampleSize 这个成员变量。

inSampleSize = options.outWidth / 200;

为了节约内存我们还可以使用下面的几个字段:

options.inPreferredConfig =Bitmap.Config.ARGB_4444;    // 默认是Bitmap.Config.ARGB_8888

/* 下面两个字段需要组合使用 */

options.inPurgeable = true;

options.inInputShareable = true;

用的时候如果是网络获取的图片,可以缓存到本地,点击的时候先从本地缓存取出,然后展示;缓存没有可以根据需要看是不是再网络请求一次(个人觉得不要,因为之前缓存请求没请求到,现在估计也请求不到);
  1. 在sdcard上开辟一定的空间,需要先判断sdcard上剩余空间是否足够,如果足够的话就可以开辟一些空间,比如10M
  2. 当需要获取图片时,就先从sdcard上的目录中去找,如果找到的话,使用该图片,并更新图片最后被使用的时间。如果找不到,通过URL去download
  3. 去服务器端下载图片,如果下载成功了,放入到sdcard上,并使用,如果失败了,应该有重试机制。比如3次。
  4. 下载成功后保存到sdcard上,需要先判断10M空间是否已经用完,如果没有用完就保存,如果空间不足就根据LRU规则删除一些最近没有被用户的资源。
editText.setLongClickable(false);
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: