先直接上代码:
photoscan.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageSwitcher
android:id="@+id/switcher"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:scaleType="matrix"
></ImageSwitcher>
<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:background="#55000000"
android:layout_height="100dip"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:gravity="center_vertical"
android:spacing="8dip"
/>
</RelativeLayout>
PictureViewAct.java
package com.liang.picdemo;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Environment;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ViewSwitcher.ViewFactory;
/**
* 图片浏览
* @author aokunsang
* @Date 2011-12-6
*/
public class PictureViewAct extends Activity implements ViewFactory{
// private static String imgPath = Environment.getExternalStorageDirectory().getPath() + "/"+"tempPic";
// private static String imgPath = Environment.getExternalStorageDirectory().getPath() + "/"+"image" ;
private static String imgPath = Environment.getExternalStorageDirectory().getPath() ;
private ImageSwitcher imageSwitcher;
private Gallery gallery;
private List<String> photoList;
private int downX,upX;
private String newFilePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.photoscan);
photoList = readFileList();
imageSwitcher = (ImageSwitcher)findViewById(R.id.switcher);
imageSwitcher.setFactory(this);
/*
* 淡入淡出效果
*/
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
imageSwitcher.setOnTouchListener(touchListener);
gallery = (Gallery)findViewById(R.id.gallery);
gallery.setAdapter(new ImageAdapter( photoList,this));
gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1,
int position, long when) {
newFilePath = photoList.get(position);
Bitmap bm = BitmapFactory.decodeFile(photoList.get(position));
BitmapDrawable bd = new BitmapDrawable(bm);
imageSwitcher.setImageDrawable(bd);
}
public void onNothingSelected(AdapterView<?> arg0) {}
});
}
/**
* 注册一个触摸事件
*/
private OnTouchListener touchListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN)
{
downX=(int) event.getX();//取得按下时的坐标
return true;
}
else if(event.getAction()==MotionEvent.ACTION_UP)
{
upX=(int) event.getX();//取得松开时的坐标
int index=0;
if(upX-downX>100)//从左拖到右,即看前一张
{
//如果是第一,则去到尾部
if(gallery.getSelectedItemPosition()==0)
index=gallery.getCount()-1;
else
index=gallery.getSelectedItemPosition()-1;
}
else if(downX-upX>100)//从右拖到左,即看后一张
{
//如果是最后,则去到第一
if(gallery.getSelectedItemPosition()==(gallery.getCount()-1))
index=0;
else
index=gallery.getSelectedItemPosition()+1;
}
//改变gallery图片所选,自动触发ImageSwitcher的setOnItemSelectedListener
gallery.setSelection(index, true);
return true;
}
return false;
}
};
/**
* 获取SD卡中的所有图片路径
* @return
*/
private List<String> readFileList(){
List<String> fileList = new ArrayList<String>();
File fileDir = new File(imgPath);
File[] files = fileDir.listFiles();
if(files!=null){
for(File file:files){
String fileName = file.getName();
if (fileName.lastIndexOf(".") > 0
&& fileName.substring(fileName.lastIndexOf(".") + 1,
fileName.length()).equals("jpg")){
fileList.add(file.getPath());
}
}
}
return fileList;
}
public View makeView() {
ImageView imageView = new ImageView(this);
imageView.setScaleType(ImageView.ScaleType.CENTER);
imageView.setLayoutParams(new ImageSwitcher.LayoutParams(//自适应图片大小
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
return imageView;
}
}
图片适配器:
ImageAdapter.java
package com.liang.picdemo;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
public class ImageAdapter extends BaseAdapter {
private List<String> photoList; // 图片地址list
private Context context;
public ImageAdapter(List<String> photoList, Context context) {
this.photoList = photoList;
this.context = context;
}
public void addImage(String imageUrl) {
photoList.add(imageUrl);
}
public int getCount() {
return photoList.size();
}
public Object getItem(int position) {
return photoList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView image = new ImageView(context);
Bitmap bm = BitmapFactory.decodeFile(photoList.get(position));
image.setImageBitmap(bm);
image.setScaleType(ImageView.ScaleType.CENTER_CROP);
image.setLayoutParams(new Gallery.LayoutParams(100, 100));
return image;
}
}