`
jk138
  • 浏览: 153840 次
  • 性别: 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; 
	  } 


}
 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Android Gallery相册浏览Demo.zip

    "Gallery相册浏览"中的布局可能包含GridView或RecyclerView,这两种视图组件可以用来显示图片列表,支持滚动和缩放。 3. **Intent**: Android系统中的Intent用于启动其他组件(如Activity或Service)。在这个Demo中...

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

    本项目“一个简单的相册GridView、Gallery的结合使用”恰好展示了如何整合这两个组件来实现这一功能。GridView和Gallery都是Android提供的布局控件,它们在显示数据集方面有各自的优势。 ** GridView详解:** ...

    -Android利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片).zip

    `Gallery`和`ImageSwitcher`组件是Android SDK提供的一种有效解决方案,尤其在处理大量图片时,通过异步加载技术可以避免UI线程阻塞,提高用户体验。本文将深入探讨如何利用这两个组件来构建一个高效、流畅的图片...

    Gallery相册浏览_Android源码.zip

    在Android开发中,"Gallery相册浏览"是一个常见的功能,涉及到用户界面(UI)设计、图片加载、滚动性能优化等多个方面。这个压缩包文件可能包含了实现这一功能的源代码,让我们来详细探讨一下其中可能涉及的关键知识点...

    android 调用相机和相册

    本文将详细介绍两种方法,一种基于郭霖的教程,另一种是经过优化可兼容小米设备的方法。 首先,我们来看郭霖教程中调用相机的方法。郭霖是一位知名的Android开发者,他的教程通常简洁易懂。调用相机的基本思路是...

    Android基于Gallery实现网络图片和本地图片循环播放

    - 如果图片来自网络,我们需要使用HttpURLConnection、OkHttp或者Retrofit等网络库进行网络请求,获取图片的URL,然后通过图片加载库将其加载到Gallery中。 5. **数据结构**: - 为了实现循环播放,我们需要维护...

    Android利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片).zip

    3. **异步加载图片**:根据索引值从服务器或本地缓存中获取图片,使用异步加载库加载图片到`ImageSwitcher`。 4. **设置`ImageSwitcher`的动画**:在`ImageSwitcher`中设置合适的切换动画,如`IN_OUT`或自定义动画。...

    ImageSwitcher 和 Gallery 的结合使用

    在Android开发中,ImageSwitcher和Gallery是两个非常实用的组件,它们可以帮助开发者实现丰富的图像展示功能。ImageSwitcher主要用于在不同的图片之间进行平滑切换,而Gallery则提供了一个可以左右滑动浏览多个图片...

    Android头像获取(拍照和相册获取)

    本文将详细介绍如何通过拍照和从相册选取两种方式获取头像,并着重解决拍照后图片角度不正确的问题。 首先,让我们来看如何实现从相册获取头像。在Android中,我们可以使用Intent来启动系统的图库应用,让用户选择...

    Gallery+ImageSwitcher组合显示图片

    这两个组件结合使用,可以创建出类似于相册应用的用户体验,让用户能够方便地浏览一系列图片。 首先,`Gallery`是Android SDK提供的一种可滚动视图,它允许用户水平滚动一串项目,每个项目通常代表一个图片或者其他...

    Android 两个gallery同时滑动

    `Gallery`是Android SDK提供的一种特殊的ListView,它允许用户在一个水平轴上浏览项目,通常用于创建相册或者选择菜单等场景。当需要两个`Gallery`组件同时滑动时,我们可能希望实现一种联动效果,即在一个`Gallery`...

    Android 学习(20)ImageSwitcher 和 Gallery

    2. 在代码中获取到ImageSwitcher实例,设置动画效果,Android提供了TransitionAnimation和InAnimation两种类型的动画。 3. 创建适配器,如ArrayAdapter,将数据集绑定到ImageSwitcher上,通过适配器的getView方法...

    Gallery分页加载和刷新加载

    在Android开发中,`Gallery`控件是一种古老但仍然有用的组件,主要用于展示一系列横向滑动的项目,类似于轮播图或者相册。然而,随着Android SDK的更新,`Gallery`已经在API 17(Android 4.2)中被废弃,推荐使用`...

    android异步在网络上读取多张图片,显示在页面布局GridView,viewPager,gallery,ListView

    在实际应用中,可以结合使用这两种方式。 五、图片库库支持 Android社区提供了很多优秀的图片库,如Glide、Picasso、Fresco等,它们都集成了异步加载、缓存策略等功能。例如: 1. Glide:轻量级且强大的图片加载库...

    ListView镶嵌Gallery

    在Android开发中,ListView和Gallery是两种常用的布局控件,它们各自有其独特的作用和应用场景。今天我们将深入探讨如何在ListView中嵌入Gallery,以创建一个具有丰富交互体验的UI设计。 ListView是Android中用于...

    camera和相册的调用及对图形进行剪裁

    Android提供了`Intent.ACTION_PICK`和`Intent.ACTION_GET_CONTENT`两种方式来调用相册。通常,我们使用`Intent.createChooser()`结合这两个Intent,让用户选择相册中的图片。选中图片后,可以使用`Intent.ACTION_...

    上传头像(选择相册或照相+裁剪)

    2. 图片选择:用户可以选择从相册( Gallery )中选取图片或者使用相机( Camera )即时拍照。这需要使用Android的Intent机制,通过ACTION_PICK和ACTION_IMAGE_CAPTURE两个Intent类型来实现。ACTION_PICK用于打开...

    拍照或相册选取单张照片(适于头像)

    这个功能允许用户通过两种方式来上传自己的头像:直接使用手机摄像头拍照或者从已有的照片库中选择一张图片。下面我们将详细探讨这一功能涉及的技术点以及实现过程。 首先,我们需要了解两个关键组件:相机(Camera...

    Android入门第十三篇之Gallery + ImageSwitcher.docx

    在Android开发中,`Gallery`控件和`ImageSwitcher`是两个非常有用的组件,尤其在创建图片轮播或相册应用时。本篇文章将详细解释如何将它们结合起来使用,以实现一个简单的图片浏览功能。 `Gallery`是Android提供的...

Global site tag (gtag.js) - Google Analytics