MediaStore在应用程序之间共享,所以大多数应用程序使用默认的MediaStore,我们就可以利用它检索图像,而且作为一个内容提供器,它也是以数据库的的方式来进行运作的。进行语句的查询之后就会返回一个Cursor对象,通过它遍历结果。
布局文件:上方显示图片,使用imageButton,可以使用onclick事件,点击图片时会到下一张。下方textView显示名称:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageButton
android:id="@+id/imgBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/imageShow" />
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java主程序文件:
package cn.yh.mediastoregallery;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.MediaStore.Images.Media;
import android.app.Activity;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
public class MainActivity extends Activity {
private ImageButton imageButton;
private TextView textView;
private Cursor cursor;
private Bitmap bitmap;
private String imageFilePath;
private int fileColumn;
private int titleColumn;
private int displaylumn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageButton = (ImageButton) findViewById(R.id.imgBtn);
textView = (TextView) findViewById(R.id.textView);
//设置要返回的字段
String[] columns = { Media.DATA, Media._ID, Media.TITLE,
Media.DISPLAY_NAME };
//执行查询,返回一个cursor
cursor = managedQuery(Media.EXTERNAL_CONTENT_URI, columns, null, null,
null);
//
fileColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
//
// titleColumn = cursor
// .getColumnIndexOrThrow(MediaStore.Images.Media.TITLE);
//
displaylumn = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME);
//
if (cursor.moveToFirst()) {
textView.setText(cursor.getString(displaylumn));
imageFilePath = cursor.getString(fileColumn);
bitmap = getBitmap(imageFilePath);
imageButton.setImageBitmap(bitmap);
}
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (cursor.moveToNext()) {
textView.setText(cursor.getString(displaylumn));
imageFilePath = cursor.getString(fileColumn);
bitmap = getBitmap(imageFilePath);
imageButton.setImageBitmap(bitmap);
}
//如果到了最后一张,再回到第一张图片
if(cursor.isLast()){
cursor.moveToFirst();
}
}
});
}
private Bitmap getBitmap(String imageFilePath) {
// TODO Auto-generated method stub
// 獲取DefaultDisplay
Display display = getWindowManager().getDefaultDisplay();
int th = textView.getHeight();
int dh = display.getHeight() - th;
int dw = display.getWidth();
BitmapFactory.Options bmFactoryOptions = new Options();
bmFactoryOptions.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(imageFilePath, bmFactoryOptions);
int hRatio = (int) Math.ceil(bmFactoryOptions.outHeight
/ (float) dh);
int wRatio = (int) Math.ceil(bmFactoryOptions.outWidth
/ (float) dw);
// 判断是按高比率缩放还是宽比例缩放
if (hRatio > 1 || wRatio > 1) {
if (hRatio > wRatio) {
bmFactoryOptions.inSampleSize = hRatio;
} else {
bmFactoryOptions.inSampleSize = wRatio;
}
}
// 对图像进行真正的解码
bmFactoryOptions.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeFile(imageFilePath, bmFactoryOptions);
return bitmap;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}