Android开发之多媒体——显示手机存储的图片
来源:互联网 发布:知乎海尔收购通用电器 编辑:程序博客网 时间:2024/06/05 19:54
在Android中多媒体文件(音乐/视频/图片)是通过MediaStore来统一管理的,本文所演示的例子是通过MediaStore获取手机存储中的图片,然后在Gallery中显示出来。例子最后的效果:
下面先贴出本文需要添加和修改的文件:main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <Gallery android:id="@+id/gallery" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>上面的xml主要做的工作就是新建了一个Gallery,下面会用来存放图片。
MainActivity.java
public class MainActivity extends Activity {private Gallery mGallery;private ArrayList<Bitmap> mImageArr = new ArrayList<Bitmap>();public static final String LOG_TAG = "MainActivity";private static final int LOAD_END = 1;private static final String mUriImage = MediaStore.Images.Media.DATA;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mGallery = (Gallery)findViewById(R.id.gallery);loadPicHandle.post(new LocadImage());//使用Handler在后台线程获取图片,获取完成之后发通知,UI线程更新显示}private Handler loadPicHandle = new Handler(){@Overridepublic void handleMessage(android.os.Message msg) {switch(msg.what){case LOAD_END:mGallery.setAdapter(new ImageAdapter(MainActivity.this,mImageArr));break;default :break;}};};public class LocadImage implements Runnable{@Overridepublic void run() {Context ctx = MainActivity.this;ContentResolver contentR = ctx.getContentResolver();Cursor cursor = null;String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.MIME_TYPE, MediaStore.Images.Media.DATA, MediaStore.Images.Media.SIZE }; String selection = MediaStore.Images.Media.MIME_TYPE + "=?"; String[] selectionArgs = { "image/jpeg" }; String sortOrder = MediaStore.Images.Media.DATE_MODIFIED + " desc"; try{cursor = contentR.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, sortOrder);if( null == cursor){Log.d(LOG_TAG,"cursor is null");}int iCount = cursor.getCount();cursor.moveToFirst();//如果图片过多内存不足会Crash,超过10张只加载10张if( iCount > 10 ){iCount = 10;}for( int i = 0; i < iCount; i++ ){int index = cursor.getColumnIndex(mUriImage);String src = cursor.getString(index);Log.d(LOG_TAG,"src:"+src); //通过图片的路径加载图片Bitmap bitmap = BitmapFactory.decodeFile( src, null );mImageArr.add(bitmap);cursor.moveToNext();}if( !mImageArr.isEmpty() ){Message msg = Message.obtain();msg.what = LOAD_END;loadPicHandle.sendMessage(msg);}}catch(Exception e){Log.e(LOG_TAG, e.getMessage());}finally{cursor.close();}}}@Overridepublic 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;}private class ImageAdapter extends BaseAdapter{private Context mContext;ArrayList<Bitmap> mImageArr;public ImageAdapter(Context mContext,ArrayList<Bitmap> mImageArr) {this.mContext = mContext;this.mImageArr = mImageArr;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mImageArr.size();}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn mImageArr.get(arg0);}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic View getView(int position, View arg1, ViewGroup arg2) {Tools.log("getView position:"+position);ImageView image = new ImageView(mContext);image.setImageBitmap(mImageArr.get(position));image.setLayoutParams(new Gallery.LayoutParams(640, 640));return image;}}}
0 0
- Android开发之多媒体——显示手机存储的图片
- android开发笔记之多媒体—小图片的加载
- android开发笔记之多媒体—图片的颜色处理
- android开发笔记之多媒体—SurfaceView
- android开发笔记之多媒体—大图片的加载
- android开发笔记之多媒体—图像的操作
- android开发笔记之多媒体—Canvas的相关方法
- android开发笔记之多媒体—图形图像处理
- android开发笔记之多媒体—播放音频(音乐)
- android开发笔记之多媒体—SoundPool(音效池)
- android开发笔记之多媒体—VideoView播放视频
- android开发笔记之多媒体—MediaPlayer + SurfaceView播放视频
- android开发笔记之多媒体—AudioManager(控制音量)
- android开发笔记之多媒体—TelephonyManager(电话管理器)
- android开发笔记之多媒体—振动器(Vibrator)
- android开发笔记之多媒体—音频和视频的录制
- Android开发笔记之多媒体图像的处理
- android开发笔记之多媒体—撕衣服(开心一下)
- activity启动的两种方
- 你多少分的呢从vs苍南县变成现实
- 玩转Ubuntu----Ubuntu的安装
- manifest学习网站总汇
- 繁忙的生活
- Android开发之多媒体——显示手机存储的图片
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值及用setsockopt()来控制recv()与send()的超时
- 转:<context:annotation-config/>
- YY与新东方的较量:在线教育持续升温
- 转:struts2加载配置文件的顺序
- spring scope="prototype"&nb…
- os MD5 加密
- Oracle查看数据库实例名
- 转:spring和hibernate整合的时候…