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并转成图片的方法。

  

posted on 2011-09-18 11:42  Conerlius  阅读(222)  评论(0编辑  收藏  举报