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

看了几个教程,学会 了两种方法实现Gallery相册,第一种是直接在res文件夹下放图片进行读取,第二种是读取sd卡的图片。

 

 

首先,写好布局main.xml

 






 

 其二,在values文件夹下新建一个attr.xml

  

            
  

   其三,写一个类,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 lis;//这是第一种方法,直接用res文件夹下的图片/*public  int[] images = {R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04};*/public ImageAdapter(Context ctx,List li){try {this.ctx = ctx;lis = li ;//使用res/values/attr.xml中的定义的Gallery属性TypedArray a = ctx.obtainStyledAttributes(R.styleable.Gallery);//取得Gallery属性的Index idmGalleryItemBackground = a.getResourceId(R.styleable.Gallery_android_galleryItemBackground, Color.GREEN);//让对象的styleable属性能够反复使用a.recycle();} catch (Exception e) {e.printStackTrace();}}@Overridepublic int getCount() {return lis.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;@Overridepublic 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(){@Overridepublic 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 getSD() { /* 设定目前所在路径 */ List it=new ArrayList();      File f=new File("/sdcard/dcim/Camera/");  File[] files=f.listFiles(); /* 将所有文件存入ArrayList中 */ for(int i=0;i
 

 

 

 

 

 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部