看了几个教程,学会 了两种方法实现Gallery相册,第一种是直接在res文件夹下放图片进行读取,第二种是读取sd卡的图片。
首先,写好布局main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Gallery
android:id="@+id/gallery"
android:layout_height="143px"
android:layout_width="fill_parent"
/>
<ImageView
android:layout_width="239px"
android:layout_height="218px"
android:layout_x="38px"
android:layout_y="184px"
android:id="@+id/ImageView_photo" >
</ImageView>
</LinearLayout>
其二,在values文件夹下新建一个attr.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Gallery">
<attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>
其三,写一个类,ImageAdapter.java
package com.chaowen;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.R.color;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.text.AndroidCharacter;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
public class ImageAdapter extends BaseAdapter {
private Context ctx;
int mGalleryItemBackground;
private List<String> lis;
//这是第一种方法,直接用res文件夹下的图片
/*public int[] images = {
R.drawable.img01,R.drawable.img02,
R.drawable.img03,R.drawable.img04
};*/
public ImageAdapter(Context ctx,List<String> li){
try {
this.ctx = ctx;
lis = li ;
//使用res/values/attr.xml中的<declare-styleable>定义的Gallery属性
TypedArray a = ctx.obtainStyledAttributes(R.styleable.Gallery);
//取得Gallery属性的Index id
mGalleryItemBackground = a.getResourceId(R.styleable.Gallery_android_galleryItemBackground, Color.GREEN);
//让对象的styleable属性能够反复使用
a.recycle();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getCount() {
return lis.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View converView, ViewGroup parent) {
try {
ImageView v = new ImageView(this.ctx);
//设定图片给ImageView对象
Bitmap bm = BitmapFactory.decodeFile(lis.get(position).toString());
v.setImageBitmap(bm);
/*v.setImageResource(this.images[position]);*/
//重新设定图片的宽高
v.setScaleType(ImageView.ScaleType.FIT_XY);
//重新设定layout的宽高
v.setLayoutParams(new Gallery.LayoutParams(128,128));
v.setBackgroundResource(mGalleryItemBackground);
return v;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
最后,在主Activity类的代码如下
package com.chaowen;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.Toast;
public class GalleryDemo extends Activity {
/** Called when the activity is first created. */
private Gallery mGallery;
private ImageView imageView;
private ImageAdapter imageAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mGallery =(Gallery) findViewById(R.id.gallery);
imageView = (ImageView)findViewById(R.id.ImageView_photo);
imageAdapter = new ImageAdapter(this,getSD());
mGallery.setAdapter(imageAdapter);
mGallery.setOnItemClickListener(new Gallery.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
//显示该图片是几号
Toast.makeText(GalleryDemo.this,
"这是图片:"+position+"号", Toast.LENGTH_SHORT).show();
//设置大图片
String photoURL = getSD().get(position);
// imageView.setBackgroundResource(imageAdapter.images[position]); 这是用res资源下的图片的方法进行放大
imageView.setImageURI(Uri.parse(photoURL));
}
});
}
/**
* 获取sd卡的图片
* @return
*/
private List<String> getSD()
{
/* 设定目前所在路径 */
List<String> it=new ArrayList<String>();
File f=new File("/sdcard/dcim/Camera/");
File[] files=f.listFiles();
/* 将所有文件存入ArrayList中 */
for(int i=0;i<files.length;i++)
{
File file=files[i];
if(getImageFile(file.getPath()))
it.add(file.getPath());
}
return it;
}
//获得文件的类型
private boolean getImageFile(String fName)
{
boolean re;
/* 取得扩展名 */
String end=fName.substring(fName.lastIndexOf(".")+1,
fName.length()).toLowerCase();
/* 按扩展名的类型决定MimeType */
if(end.equals("jpg")||end.equals("gif")||end.equals("png")
||end.equals("jpeg")||end.equals("bmp"))
{
re=true;
}
else
{
re=false;
}
return re;
}
}