public class MainActivity extends Activity {
private final static int DISPLAY_HEIGHT=200;
private final static int DISPLAY_WIDTH=200;
@SuppressWarnings("deprecation")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.img_listview);
String[] columns = { Media.DATA};
//使用共享内容提供者。
Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, columns, null, null, null);
//构建一个简单的适配器
SimpleAdapter sAdapter = new SimpleAdapter(getApplicationContext(), getImageMap(cursor),
R.layout.listview_layout,
new String[]{"img"},
new int[]{R.id.img});
//存入biner
sAdapter.setViewBinder(new ViewBinder() {
@Override
public boolean setViewValue(View view, Object data,
String textRepresentation) {
//判断是否是ImageView类型
if(view instanceof ImageView){
ImageView image = (ImageView) view;
//把map里的value取出来.
String imageFilePath = (String) data;
//显示图像
image.setImageBitmap(getBitmap(imageFilePath));
}
return true;
}
});
listView.setAdapter(sAdapter);
}
private List<Map<String,Object>> getImageMap(Cursor sc){
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
Map<String,Object> map =null;
while(sc.moveToNext()){
map = new HashMap<String,Object>();
map.put("img",sc.getString(0));
System.out.println("image path:"+sc.getString(0));
list.add(map);
}
return list;
}
private Bitmap getBitmap(String imageFilePath) {
//加载图像的尺寸而不是图像的本身
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
Bitmap bp = BitmapFactory.decodeFile(imageFilePath, opts);
int heightRatio = (int) Math.ceil(opts.outHeight/(float)DISPLAY_HEIGHT);
int widthRatio =(int) Math.ceil(opts.outHeight/(float)DISPLAY_WIDTH);
System.out.println("heightRatio :"+heightRatio);
System.out.println("widthRatio :"+widthRatio);
//如果两个比率都大于1,那么图像 的一条边大于屏幕
if(widthRatio>1&&heightRatio>1){
if(heightRatio>widthRatio)
//若高度比率较大,则根据它进行缩放
opts.inSampleSize = heightRatio;
else
//若宽度比率较大,则根据它进行缩放
opts.inSampleSize = widthRatio;
}
//-----------------------------------------------------//
//对它进行解码
opts.inJustDecodeBounds =false;
bp = BitmapFactory.decodeFile(imageFilePath, opts);
return bp;
}
}
activity_main.xml :文件如下
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView android:id="@+id/img_listview"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:dividerHeight="1dip"/>
</LinearLayout>
listview_layout.xml 文件如下:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView android:id="@+id/img_listview"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:dividerHeight="1dip"/>
</LinearLayout>