现在的位置: 首页 > 综合 > 正文

一个简单的相册GridView、Gallery的结合使用

2017年02月04日 ⁄ 综合 ⁄ 共 13344字 ⁄ 字号 评论关闭

这里用到了GridView,九宫格,fileAction主要是展示相册下面的文件

package com.example.testpro;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.example.entity.Constant;
import com.example.testpro.PictureAction.ItemClickListener;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;

public class FileActivite extends Activity{

private static String imgPath ;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pict);
        imgPath = getSDPath();
        List<String> files = readFileList();
        GridView gridview = (GridView) findViewById(R.id.gridview);
        
        //生成动态数组,并且转入数据
        List<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
        for(String path : files)
        {
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("ItemImage", R.drawable.file);//添加图像资源的ID
map.put("ItemText", path);//按序号做ItemText
        lstImageItem.add(map);
        }
        //生成适配器的ImageItem <====> 动态数组的元素,两者一一对应
        SimpleAdapter saImageItems = new SimpleAdapter(this, //没什么解释
                                           lstImageItem,//数据来源 
                                           R.layout.night_item,//night_item的XML实现
                                           //动态数组与ImageItem对应的子项        
                                           new String[] {"ItemImage","ItemText"}, 
                                           //ImageItem的XML文件里面的一个ImageView,两个TextView ID
                                           new int[] {R.id.ItemImage,R.id.ItemText});
        //添加并且显示
        gridview.setAdapter(saImageItems);
        //添加消息处理
        gridview.setOnItemClickListener(new ItemClickListener());
    }
    
    //当AdapterView被单击(触摸屏或者键盘),则返回的Item单击事件
    class  ItemClickListener implements OnItemClickListener
    {
public void onItemClick(AdapterView<?> arg0,//The AdapterView where the click happened 
                         View arg1,//The view within the AdapterView that was clicked
                         int arg2,//The position of the view in the adapter
                         long arg3//The row id of the item that was clicked
                         ) {
//在本例中arg2=arg3
HashMap<String, Object> item=(HashMap<String, Object>) arg0.getItemAtPosition(arg2);
// 显示所选Item的ItemText
// setTitle((String)item.get("ItemText"));
loginSuccess((String)item.get("ItemText"));
}
   
    }
    /**
* 登录成功后跳转的页面
*/
private void loginSuccess(String path) {
Intent intent = new Intent();
intent.setClass(FileActivite.this, PictureAction.class);
Bundle bd = new Bundle();
bd.putString("name", path);
intent.putExtras(bd);
startActivity(intent);
finish();
}

/** 
     * 获取SD卡中的所有图片路径 
     * @return 
     */  
    private List<String> readFileList(){  
        List<String> fileList = new ArrayList<String>();  
        File fileDir = new File(imgPath+"/bwgc/capture");  
        File[] files = fileDir.listFiles(); 
        if(files!=null){  
            for(File file:files){  
// if(file.isFile()){
String fileName = file.getName();
fileList.add(fileName);
// }
            }  
        }  
        return fileList;  
    }  
    
    public static String getSDPath() {
boolean hasSDCard = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
if (hasSDCard) {
return Environment.getExternalStorageDirectory().toString();
} else
return Environment.getDownloadCacheDirectory().toString();
}

}

PictureAction.java 类主要是对改文件下的相册进行整体的展示

package com.example.testpro;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.example.entity.Constant;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.SimpleAdapter;

public class PictureAction extends Activity{
private static String imgPath ;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pict);
        Intent intent = getIntent();
Bundle bd = intent.getExtras();
if(bd!=null){
String newPath = bd.get("name").toString();
       imgPath = getSDPath()+"/bwgc/capture/"+newPath;
}
        Constant.paths = readFileList();
        GridView gridview = (GridView) findViewById(R.id.gridview);
        
        //生成动态数组,并且转入数据
        List<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
        for(String path : Constant.paths)
        {
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("ItemImage", path);//添加图像资源的ID
map.put("ItemText", changeName(path));//按序号做ItemText
        lstImageItem.add(map);
        }
        //生成适配器的ImageItem <====> 动态数组的元素,两者一一对应
        SimpleAdapter saImageItems = new SimpleAdapter(this, //没什么解释
                                           lstImageItem,//数据来源 
                                           R.layout.night_item,//night_item的XML实现
                                           //动态数组与ImageItem对应的子项        
                                           new String[] {"ItemImage","ItemText"}, 
                                           //ImageItem的XML文件里面的一个ImageView,两个TextView ID
                                           new int[] {R.id.ItemImage,R.id.ItemText});
        //添加并且显示
        gridview.setAdapter(saImageItems);
        //添加消息处理
        gridview.setOnItemClickListener(new ItemClickListener());
    }
    
    //当AdapterView被单击(触摸屏或者键盘),则返回的Item单击事件
    class  ItemClickListener implements OnItemClickListener
    {
public void onItemClick(AdapterView<?> arg0,//The AdapterView where the click happened 
                         View arg1,//The view within the AdapterView that was clicked
                         int arg2,//The position of the view in the adapter
                         long arg3//The row id of the item that was clicked
                         ) {
//在本例中arg2=arg3
HashMap<String, Object> item=(HashMap<String, Object>) arg0.getItemAtPosition(arg2);
// 显示所选Item的ItemText
// setTitle((String)item.get("ItemText"));
loginSuccess((String)item.get("ItemImage"));
}
   
    }
    /**
* 登录成功后跳转的页面
*/
private void loginSuccess(String path) {
Intent intent = new Intent();
intent.setClass(PictureAction.this, PictureViewAct.class);
Bundle bd = new Bundle();
bd.putString("photePath", path);
intent.putExtras(bd);
startActivity(intent);
finish();
}

/** 
     * 获取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(); 
                String temp = fileName.substring(fileName.lastIndexOf(".") + 1,    
                        fileName.length());
                if (fileName.lastIndexOf(".") > 0 && (temp.equals("jpg")||temp.equals("png"))){  
                    fileList.add(file.getPath());  
                }  
            }  
        }  
        return fileList;  
    }  
    
    public static String getSDPath() {
boolean hasSDCard = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
if (hasSDCard) {
return Environment.getExternalStorageDirectory().toString();
} else
return Environment.getDownloadCacheDirectory().toString();
}
    
    private String changeName(String path){
    if(path.contains("/")){
    return path.substring(path.lastIndexOf("/")+1, path.length());
    }
    return path;
    }
    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent();
intent.setClass(PictureAction.this, FileActivite.class);
startActivity(intent);
finish();
}
return super.onKeyDown(keyCode, event);
}
}

点击图片,对单个图片进行展示,这里用到了Gallery

package com.example.testpro;

import com.example.adapter.ImageAdapter;
import com.example.entity.Constant;
import com.example.util.Util;

import android.app.Activity;
import android.content.Intent;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
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.TextView;
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 imgPath1;
private boolean isFirst = true;

private ImageSwitcher imageSwitcher;
private Gallery gallery;
private int downX, upX;
private String newFilePath;
private int pathIndex;
private TextView textView;

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.rsu);  
        pathIndex = fixPathIndex(newFilePath);
        imageSwitcher = (ImageSwitcher)findViewById(R.id.switcher);  
        imageSwitcher.setFactory(this);  
        textView = (TextView) findViewById(R.id.switcher_name);
        textView.setText(Util.changeName(Constant.paths.get(pathIndex)));
        /* 
         * 淡入淡出效果 
         */  
        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( Constant.paths,this)); 
        gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  
            public void onItemSelected(AdapterView<?> arg0, View arg1,  
                    int position, long when) {  
            if (newFilePath != null) {
            newFilePath = Constant.paths.get(position);  
}else{
Intent intent = getIntent();
Bundle bd = intent.getExtras();
newFilePath = bd.get("photePath").toString();
}
                Bitmap bm = BitmapFactory.decodeFile(newFilePath);  
                BitmapDrawable bd = new BitmapDrawable(bm);  
                imageSwitcher.setImageDrawable(bd);
                textView.setText(Util.changeName(newFilePath));
            }  
            public void onNothingSelected(AdapterView<?> arg0) {
            }  
        });  
        gallery.setSelection(pathIndex, true);
    }  
      
    private int fixPathIndex(String newFilePath2) {
    Intent intent = getIntent();
Bundle bd = intent.getExtras();
String newPath = bd.get("photePath").toString();
    for(int i=0;i<Constant.paths.size();i++){
    if(Constant.paths.get(i).equals(newPath)){
    return i;
    }
    }
return 0;
}

/** 
     * 注册一个触摸事件 
     */  
    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=pathIndex;    
                    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);    
                    textView.setText(Util.changeName(Constant.paths.get(index)));
                    return true;    
                }    
                return false;    
            }  
    };  
    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;  
    }  
    
    public static String getSDPath() {
boolean hasSDCard = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
if (hasSDCard) {
return Environment.getExternalStorageDirectory().toString();
} else
return Environment.getDownloadCacheDirectory().toString();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent();
intent.setClass(PictureViewAct.this, PictureAction.class);
startActivity(intent);
finish();
}
return super.onKeyDown(keyCode, event);
}
}  

图片的配置器

package com.example.adapter;

import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.KeyEvent;
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.FIT_START);
image.setLayoutParams(new Gallery.LayoutParams(300, 300));
return image;

}
}

常值类

package com.example.entity;

import java.util.ArrayList;
import java.util.List;

public class Constant {
public static List<String> paths = new ArrayList<String>();
}

可以到这里下载源代码,如果这个代码不行,我可以发给你

http://download.csdn.net/detail/u011715213/8242667

抱歉!评论已关闭.