用户界面很大程度上决定了APP是否被用户接收,为了提供友好的界面,就需要在应用中使用图片了,Android提供了丰富的图片处理功能。

简单使用图片

使用Drawable对象

为Android应用增加了Drawable资源之后,系统会自动在R.java文件中创建一个索引项:R.drawable.fileName,然后在Java中可以通过R.drawable.fileName来获取到该资源的索引(一个int类型的常量),如果要获取实际的Drawable对象,则可以调用Resources的getDrawable(int id)方法来获取。

ImageView image =(ImageView) findViewById(R.id.image);

image.setImageResource(R.drawable.pic1);

Bitmap和BitmapFactory

Bitmap代表一张位图,BitmapDrawable里封装的图片是一个Bitmap对象。开发者为了把一个Bitmap对象包装成一个BitmapDrawable对象,可以调用BitmapDrawable的构造器:

BitmapDrawable bd = new BitmapDrawable(bitmap);

如果需要获取BitmapDrawable所包装的Bitmap对象,则可调用BitmapDrawable的getBitmap()方法

Bitmap bitmap = drawable.getBitmap();

BitmapFactory是一个工具类,用于从不同的数据源来解析、创建Bitmap对象

BitmapFactory提供了一系列方法来帮助我们创建一个Bitmap对象,然后我们可以通过

imageView.setImageBitmap(Bitmap bm)

来更改一个ImageView显示的图像。

由于系统内容比较小,如果系统不停的去解析、创建Bitmap对象,可能会有内存溢出错误,所以Android为Bitmap提供了两个方法来判断它是否已经回收,如果没有,则强制Bitmap回收自己

booleanisRecycled(); 判断该Bitmap对象是否已被回收void recycle() 强制Bitmap对象回收自己

一个例子:

java Thumbnails设置图片圆角 java使用图片_android

java Thumbnails设置图片圆角 java使用图片_java_02

packagecn.lixyz.bitmaptest;importandroid.app.Activity;importandroid.content.res.AssetManager;importandroid.graphics.BitmapFactory;importandroid.graphics.drawable.BitmapDrawable;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.ImageView;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;public class MainActivity extends Activity implementsView.OnClickListener {privateImageView imageView;private ArrayListimages;privateButton btnNext;privateButton btnLast;private int index = 0;privateAssetManager am;public voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//获得组件
imageView =(ImageView) findViewById(R.id.image);
btnNext=(Button) findViewById(R.id.next);
btnLast=(Button) findViewById(R.id.last);//调用getImages方法,获取assets下的图片集合
getImages();//点击按钮
btnNext.setOnClickListener(this);
btnLast.setOnClickListener(this);
}/*** 因为assets下不光有图片,还会有其他的目录或文件,需要将图片甄别出来存到一个list中当作数据源*/
public voidgetImages() {
String[] tmpImgs= null;
images= new ArrayList();//getAssets()方法可以获得AssetManager对象
am =getAssets();try{//获取asset下内容list
tmpImgs = am.list("");//挑出.jpg文件,存入list中
for (int i = 0; i < tmpImgs.length; i++) {if (tmpImgs[i].endsWith(".jpg")) {
images.add(tmpImgs[i]);
}
}
}catch(IOException e) {
e.printStackTrace();
}
}/*** 点击按钮事件
*
*@paramv view对象,用于判断点击的是什么按钮*/@Overridepublic voidonClick(View v) {switch(v.getId()) {caseR.id.next:try{
index++; //下标+1,用于显示下一张图片
if (index >= images.size()) { //防止越界
index = 0;
}//判断Bitmap是否已经回收,如果没有回收,则先回收
BitmapDrawable bd =(BitmapDrawable) imageView.getDrawable();if (bd != null && !bd.getBitmap().isRecycled()) {
bd.getBitmap().recycle();
}//AssetManager类的open方法,可以返回一个输入流
InputStream is =am.open(images.get(index));//通过BitmapFactory的decodeStream()方法,改变显示图像
imageView.setImageBitmap(BitmapFactory.decodeStream(is));
}catch(IOException e) {
e.printStackTrace();
}break;caseR.id.last:try{
index--; //下标+1,用于显示下一张图片
if (index < 0) { //防止越界
index = images.size() - 1;
}//判断Bitmap是否已经回收,如果没有回收,则先回收
BitmapDrawable bd =(BitmapDrawable) imageView.getDrawable();if (bd != null && !bd.getBitmap().isRecycled()) {
bd.getBitmap().recycle();
}//AssetManager类的open方法,可以返回一个输入流
InputStream is =am.open(images.get(index));//通过BitmapFactory的decodeStream()方法,改变显示图像
imageView.setImageBitmap(BitmapFactory.decodeStream(is));
}catch(IOException e) {
e.printStackTrace();
}break;
}
}
}

MainActivity.java

java Thumbnails设置图片圆角 java使用图片_android使用java的图片_03

java Thumbnails设置图片圆角 java使用图片_android_04

activity_main.xml

运行结果:

java Thumbnails设置图片圆角 java使用图片_Android_05

java Thumbnails设置图片圆角 java使用图片_android_06