ImageSwitcher结合Gallery展示SD卡中的资源图片
2013-11-28 17:30
302 查看
package com.andyidea.imagedemo; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.Gallery.LayoutParams; import android.widget.ImageSwitcher; import android.widget.ImageView; import android.widget.Toast; import android.widget.ViewSwitcher.ViewFactory; /** * ImageSwitcher和Gallery如何展示SD卡中的资源图片 * @author Andy.Chen * @email:Chenjunjun.ZJ@gmail.com */ public class ImageSwitcherAndGalleryDemoActivity extends Activity implements OnItemSelectedListener,ViewFactory{ private List imagePathList; private String[] list; private ImageSwitcher mSwitcher; private Gallery mGallery; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imagePathList=getImagePathFromSD(); list = imagePathList.toArray(new String[imagePathList.size()]); /* 设定Switcher */ mSwitcher = (ImageSwitcher) findViewById(R.id.switcher); mSwitcher.setFactory(this); /* 设定载入Switcher的模式 */ mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); /* 设定输出Switcher的模式 */ mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); mSwitcher.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(ImageSwitcherAndGalleryDemoActivity.this, "你点击了ImageSwitch上的图片", Toast.LENGTH_SHORT).show(); } }); mGallery = (Gallery) findViewById(R.id.mygallery); /* 新增几ImageAdapter并设定给Gallery对象 */ mGallery.setAdapter(new ImageAdapter(this, getImagePathFromSD())); mGallery.setOnItemSelectedListener(this); /* 设定一个itemclickListener事件 */ mGallery.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { Toast.makeText(ImageSwitcherAndGalleryDemoActivity.this, "你点击了Gallery上的图片", Toast.LENGTH_SHORT).show(); } }); } /** 从SD卡中获取资源图片的路径 */ private List getImagePathFromSD() { /* 设定目前所在路径 */ List it = new ArrayList(); //根据自己的需求读取SDCard中的资源图片的路径 String imagePath = Environment.getExternalStorageDirectory().toString()+"/hknational/image"; File mFile = new File(imagePath); File[] files = mFile.listFiles(); /* 将所有文件存入ArrayList中 */ for (int i = 0; i < files.length; i++) { File file = files; if (checkIsImageFile(file.getPath())) it.add(file.getPath()); } return it; } /** 判断是否相应的图片格式 */ private boolean checkIsImageFile(String fName) { boolean isImageFormat; /* 取得扩展名 */ 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")) { isImageFormat = true; } else { isImageFormat = false; } return isImageFormat; } /* 改写BaseAdapter自定义一ImageAdapter class */ public class ImageAdapter extends BaseAdapter { /* 声明变量 */ int mGalleryItemBackground; private Context mContext; private List lis; /* ImageAdapter的构造符 */ public ImageAdapter(Context c, List li) { mContext = c; lis = li; /* * 使用res/values/attrs.xml中的定义 的Gallery属性. */ TypedArray mTypeArray = obtainStyledAttributes(R.styleable.Gallery); /* 取得Gallery属性的Index id */ mGalleryItemBackground = mTypeArray.getResourceId( R.styleable.Gallery_android_galleryItemBackground, 0); /* 让对象的styleable属性能够反复使用 */ mTypeArray.recycle(); } /* 重写的方法getCount,传回图片数目 */ public int getCount() { return lis.size(); } /* 重写的方法getItem,传回position */ public Object getItem(int position) { return position; } /* 重写的方法getItemId,传并position */ public long getItemId(int position) { return position; } /* 重写方法getView,传并几View对象 */ public View getView(int position, View convertView, ViewGroup parent) { /* 产生ImageView对象 */ ImageView i = new ImageView(mContext); /* 设定图片给imageView对象 */ Bitmap bm = BitmapFactory.decodeFile(lis.get(position).toString()); i.setImageBitmap(bm); /* 重新设定图片的宽高 */ i.setScaleType(ImageView.ScaleType.FIT_XY); /* 重新设定Layout的宽高 */ i.setLayoutParams(new Gallery.LayoutParams(136, 88)); /* 设定Gallery背景图 */ i.setBackgroundResource(mGalleryItemBackground); /* 传回imageView对象 */ return i; } } @Override public View makeView() { ImageView iv = new ImageView(this); iv.setBackgroundColor(0xFF000000); iv.setScaleType(ImageView.ScaleType.FIT_CENTER); iv.setLayoutParams(new ImageSwitcher.LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); return iv; } @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { // TODO Auto-generated method stub String photoURL = list[position]; Log.i("A", String.valueOf(position)); mSwitcher.setImageURI(Uri.parse(photoURL)); } @Override public void onNothingSelected(AdapterView parent) { // TODO Auto-generated method stub } }
程序运行效果图如下:
相关文章推荐
- Linux下select, poll和epoll IO模型的详解
- android 通过悬浮窗调节屏幕亮度
- 进程与线程的区别和联系
- Hadoop map reduce 过程获取环境变量
- 算法:Rate of Growth
- opacity兼容性问题
- 大型网站的架构设计问题—-大型高并发高负载网站的系
- 杨森翔个人材料
- Sqoop安装过程详解
- 表空间、段、区、块
- 如何解决在android4.4系统中无法正常恢复短信
- 根据Unicode编码完美的判断中文汉字和符号
- Linux makefile 教程
- 【摘】Session详解
- Linux input子系统分析 主要函数
- mesure、layout、draw
- eclipse 导入android源码
- 4.11 Moving Cells and Sections in Table Views
- jsp文件模板
- main函数入口处的段错误