`
jk138
  • 浏览: 150350 次
  • 性别: Icon_minigender_1
  • 来自: 茂名
社区版块
存档分类
最新评论

Gallery相册两种读取图片的方法

阅读更多

看了几个教程,学会 了两种方法实现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; 
	  } 


}
 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics