业务层提供数据:
实体类:
package com.ghg.Entity;
import android.graphics.Bitmap;
public class BitmapInfo {
private String path;
private String title;
private Bitmap bitmap;
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Bitmap getBitmap() {
return bitmap;
}
public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
}
}
构造数据源:
package com.ghg.Bitmapbiz;
import java.io.File;
import java.util.ArrayList;
import android.graphics.BitmapFactory;
import com.ghg.BitmapService.BitmapService;
import com.ghg.Entity.BitmapInfo;
/**
* 从文件中读取所有图片添加到list集合中,构成数据源
* @author gaohong
*
*/
public class BitmapBiz {
public ArrayList<BitmapInfo> getBitmapInfos(String pathName){
ArrayList<BitmapInfo> list=null;
if(pathName!=null){
//根据路径创建文件
File dir=new File(pathName);
if (dir.exists()&&dir.isDirectory()) {
list=new ArrayList<BitmapInfo>();//初始化list集合
String[] files=dir.list();//获取目录下所有文件名
//遍历files并依次构建BitmapInfo对象
for(String file:files){
BitmapInfo info=new BitmapInfo();
info.setTitle(file.substring(0, file.lastIndexOf(".")));
info.setPath(pathName+file);
info.setBitmap(BitmapService.getBitmap(info.getPath(), 80, 80));
list.add(info);
}
}
}
return list;
}
}
工具类提供bitmap:
package com.ghg.BitmapService;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
public class BitmapService {
//通过路径名获得位图
public static Bitmap getBitmap(String pathName){
return BitmapFactory.decodeFile(pathName);
}
//通过路径名获得位图的缩略图
public static Bitmap getBitmap(String pathName,int scale){
Options opts=new Options();
opts.inSampleSize=scale;
return BitmapFactory.decodeFile(pathName, opts);
}
//通过文件名获得缩略图,指定缩略后的尺寸,宽,高各为多少
public static Bitmap getBitmap(String pathName,int width,int height){
Options opts=new Options();
opts.inJustDecodeBounds=true;//仅读取边界信息
BitmapFactory.decodeFile(pathName, opts);//读完后的信息保存到opts对象中
int x=opts.outWidth/width;
int y=opts.outHeight/height;
int scale=x>y?x:y;
opts.inJustDecodeBounds=false;
return getBitmap(pathName, scale);
}
}
适配器提供视图项:
package com.ghg.BitmapAdapter;
import java.util.ArrayList;
import com.ghg.Entity.BitmapInfo;
import com.ghg.Gallery.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class Adapter extends BaseAdapter {
private ArrayList<BitmapInfo> list;
private LayoutInflater inflater;
public Adapter(Context context,ArrayList<BitmapInfo> list){
this.inflater=LayoutInflater.from(context);
this.list=list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
if (convertView==null) {
//系统不提示自定义的资源,可以导入自己R资源,R前面加上R所在的包名;
convertView=inflater.inflate(R.layout.item, null);
holder=new ViewHolder();
holder.galleryItem=(ImageView) convertView.findViewById(R.id.iv_calleryItem);
holder.pictureTitle=(TextView) convertView.findViewById(R.id.tv_title);
convertView.setTag(holder);
}else {
holder=(ViewHolder) convertView.getTag();
}
//从数据源读取数据,绘制Gallery的item项;
BitmapInfo info=list.get(position);
holder.galleryItem.setImageBitmap(info.getBitmap());
holder.pictureTitle.setText(info.getTitle());
return convertView;
}
class ViewHolder{
private ImageView galleryItem;
private TextView pictureTitle;
}
}
activity中显示Gallery:
package com.ghg.Gallery;
import com.ghg.BitmapAdapter.Adapter;
import com.ghg.BitmapService.BitmapService;
import com.ghg.Bitmapbiz.BitmapBiz;
import com.ghg.Entity.BitmapInfo;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Gallery;
import android.widget.ImageView;
public class Day0704_GalleryDemoActivity extends Activity {
private static final String PATHNAME="/mnt/sdcard/imgs/";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
initListener();
}
ImageView imageView;
private void initListener() {
imageView=(ImageView) findViewById(R.id.iv_topPic);
gallery.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
BitmapInfo info=(BitmapInfo) adapter.getItem(position);
Bitmap bm=BitmapService.getBitmap(info.getPath());
imageView.setImageBitmap(bm);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
}
Gallery gallery;
BitmapBiz biz;
Adapter adapter;
private void initView() {
// TODO Auto-generated method stub
gallery=(Gallery) findViewById(R.id.gallery);
biz=new BitmapBiz();
adapter=new Adapter(this, biz.getBitmapInfos(PATHNAME));
gallery.setAdapter(adapter);
}
}
用到的布局文件:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/iv_topPic"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1.0"
/>
<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:spacing="10dp"
/>
</LinearLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="80dp"
android:layout_height="80dp"
>
<ImageView
android:id="@+id/iv_calleryItem"
android:layout_width="80dp"
android:layout_height="80dp"
android:scaleType="fitCenter"
/>
<TextView
android:id="@+id/tv_title"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center_horizontal"
/>
</FrameLayout>