Gallery本地开发是一个相对简单的例子,下面将讲棕此例子开发的过程与代码!
首先main.xml文件的代码:
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent">
6 <Gallery
7 android:id="@+id/gallery"
8 android:layout_width="fill_parent"
9 android:layout_height="fill_parent"
10 >
11 </Gallery>
12 </LinearLayout>
MainActivity.java:
View Code
1 package com.chiefcto.TimePicker;
2
3 import android.app.Activity;
4 import android.content.Intent;
5 import android.os.Bundle;
6 import android.util.Log;
7 import android.view.View;
8 import android.widget.AdapterView;
9 import android.widget.AdapterView.OnItemClickListener;
10 import android.widget.Gallery;
11 import android.widget.Toast;
12
13 public class MainActivity extends Activity {
14
15
16 /** Called when the activity is first created. */
17 @Override
18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.main);
21
22 Gallery g = (Gallery)findViewById(R.id.gallery);
23 g.setAdapter(new ImageAdapter(this));
24
25 g.setBackgroundResource(R.drawable.bg);
26 g.setOnItemClickListener(new OnItemClickListener() {
27
28 public void onItemClick(AdapterView<?> parent, View v, int position,
29 long id) {
30 // TODO Auto-generated method stub
31 /*Intent intent = new Intent();
32 intent.setClass(MainActivity.this, PictureShow.class);
33 intent.putExtra("pic", position);*/
34 Log.i("CTO", String.valueOf(id));
35 Toast.makeText(MainActivity.this, "你选 择了"+(id)+"号图片", Toast.LENGTH_LONG).show();
36 }
37
38 });
39 }
40 }
ImageAdapter.java
View Code
package com.chiefcto.TimePicker;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CursorAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
public class ImageAdapter extends BaseAdapter {
//Properties
static long[] mImageid;
private Context mContext;
private Cursor cs,cursor;
private ContentResolver cc;
public ImageAdapter(Context c) {
mContext=c;
this.setMImageIds();
}
public void setMImageIds() {
cc=mContext.getContentResolver();
cs=cc.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null,
null, null, MediaStore.Images.Media.DEFAULT_SORT_ORDER);
String[] projection = {MediaStore.Images.Media._ID};
// Create the cursor pointing to the SDCard
cursor = cc.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, // Which columns to return
null, // Return all rows
null,
MediaStore.Images.Media.DEFAULT_SORT_ORDER);
//cursor.moveToFirst();
int i=1;
mImageid = new long[getCount()+1];
while(cursor.moveToNext()) {
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
String imageid = cursor.getString(columnIndex);
mImageid[i] = Long.parseLong(imageid);
i++;
}
}
public int getCount() {
//return mImageids.length;
return cs.getCount();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position,View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDither = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
//System.out.println(cs.getString(cs.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME)));
// Get the column index of the Thumbnails Image ID
/*int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
String imageid = cursor.getString(columnIndex);
long imagelong = Long.parseLong(imageid);*/
//cursor.moveToPosition(position);
// Get image filename
//String imagePath = cursor.getString(columnIndex);
//Bitmap pic = BitmapFactory.decodeFile(imagePath);
Bitmap pic = MediaStore.Images.Thumbnails.getThumbnail(cc, mImageid[position],
Images.Thumbnails.MICRO_KIND, options);
//Bitmap pib = Bitmap.createScaledBitmap(pic, 200, 200, false);
imageView.setImageBitmap(pic);
imageView.setLayoutParams(new Gallery.LayoutParams(230, 200));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
//cs.moveToFirst();
return imageView;
}
}
在ImageAdapter中,本地图片的获取是有点复杂的,由于Android系统架构,可以直接调用Android系统里的资源,本文用到的是ContentResolver,通过ContentResolver来获得Cursor,但如何通过Cursor取出图片,从官方文档中找到Cursor中取出_ID并转成图片的方法。