一 图片知识点
当Drawable资源被R.java收录之后,就可以在XML资源文件中,通过@drawable/draw_name来访问该Drawable对象,也可以在Java代码中通过R.drawable.drwa_name访问到该Drawable资源的ID,它是一个int类型的常量,如果需要获取实际Drawable资源对象,则可以使用Resource.getDrawable(int id)方法通过其Drawable资源ID获取对应的Drawable资源的对象。
BitmapFactory解析不同数据源,获取Bitmap的常用静态方法方法如下:
static Bitmap decodeByteArray(byte[] data,int offset int length):从字节数组data中,offset位置开始,将长度为length的直接数据解析成Bitmap对象。
static Bitmap decodeFile(String pathName):解析pathName路径指定的文件,创建Bitmap对象。
static Bitmap decodeResource(Resources res,int id):根据Drawable资源ID从Android资源中解析创建Bitmap对象。
static Bitmap decodeStream(InputStream is):从指定输入流中解析创建Bitmap对象。
Android为Bitmap提供了两个方法来判断Bitmap对象是否已经被回收,以及强制Bitmap回收。
boolean isRecycled():判断该Bitmap对象是否被回收
viod recycle():强制Bitmap对象立即回收自己。
得到一个屏幕尺寸的三种方法如下:
// 通过WindowManager获取
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
// 通过Resources获取
DisplayMetrics dm2 = getResources().getDisplayMetrics();
// 获取屏幕的默认分辨率
Display display = getWindowManager().getDefaultDisplay();
System.out.println("width-display :" + display.getWidth());
System.out.println("heigth-display :" + display.getHeight());
在安卓4.2系统中,使用方法一得到了正确的屏幕尺寸值,而使用方法二和三得到的值全部为零。原因不祥。其中方法三中的display.getWidth()和display.getHeight()已被弃用。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);//display = getWindowManager().getDefaultDisplay();display.getMetrics(dm)(把屏幕尺寸信息赋值给DisplayMetrics dm);
width = dm.widthPixels;
height = dm.heightPixels;
matrix简介
对于一个图片变换的处理,需要Matrix类的支持,它位于"android.graphics.Matrix"包下,是Android提供的一个矩阵工具类,它本身不能对图像或View进行变换,但它可与其它API结合来控制图形、View的变换,如Canvas。
对于一个从BitmapFactory.decodeXxx()方法解析创建的Bitmap对象而言,它是一个只读的对象,无法对其进行处理,必须使用Bitmap.createBitmap()方法重新创建一个原Bitmap对象的拷贝,才可以对拷贝的Bitmap进行处理。
因为图像的变换是针对每一个像素点的,所以有些变换可能发生像素点的丢失,这里需要使用Paint.setAnitiAlias(boolean)设置来消除锯齿,这样图片变换后的效果会好很多。
在重新创建一个Bitmap对象的拷贝的时候,需要注意它的宽高,如果设置不妥,很可能变换后的像素点已经移动到"图片之外"去了。
Imageview介绍
ImageView提供了多个setImageXxx()的方法,以适应不同来源的图片资源,这些方法有如下几个:
void setImageBitmap(Bitmap bm):设定一个Bitmap对象作为ImageView的显示图像。
void setImageDrawable(Drawable drawable):设定一个Drawable对象作为ImageView的显示图像。
void setImageResource(int resId):设定一个Drawable资源ID作为ImageView的显示图像。
void setImageURI(Uri uir):设定一个Uri地址作为ImageView的显示对象,可以是网络Uri或者本地内容提供者的Uri地址