`

Gallery显示,读取SD卡内的图片

阅读更多
在图片当道的如下,还是有图更有说服力。
小子不才,所以这个demo是我东找西找然后自己凑的一个例子。内有失当之处,多包涵多指正!
  等了三天才能发帖子,这点JAVAEYE真的应该改变一下了,要不然把我这样的孩子憋生啥样了。。。
1。首先定义xml
  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
    android:background="#55000000"
  >
  <ImageSwitcher                          //此控件与Gallery会经常用的,切记
  android:id="@+id/switcher"
  android:layout_width="wrap_content"
  android:layout_height="350dip"
  android:layout_alignParentLeft="true"
  android:layout_alignParentRight="true"
  />
  <Gallery
  android:id="@+id/mygallery"
  android:layout_width="fill_parent"
  android:layout_height="80dp"
  android:layout_alignParentBottom="true"
  android:layout_alignParentLeft="true"
  android:gravity="center_vertical"
  android:spacing="16dp"
  />
 
 
  </RelativeLayout>
2。Activity中要自定义显示
package com.ldci.second.mypnone;

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

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ViewSwitcher;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Gallery.LayoutParams;

public class BgPictureShowActivity extends Activity implements
AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory  {

private List<String> ImageList;
private String []list;
  private ImageSwitcher mSwitcher;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// //去掉状态栏,且显示自己程序名称
//        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.pictureshow);

ImageList=getSD();
        list = ImageList.toArray(new String[ImageList.size()]);
   
    /*设定Switcher*/
    mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
    mSwitcher.setFactory(this);
    /*设定载入Switcher的模式*/
    mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
            android.R.anim.fade_in));
    /*设定输出Switcher的模式*/
    mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
            android.R.anim.fade_out));
    mSwitcher.setOnClickListener(new OnClickListener(){


public void onClick(View v) {
  Toast.makeText(BgPictureShowActivity.this, "点击了", Toast.LENGTH_SHORT).show();

}
   
    });
   
    Gallery g = (Gallery) findViewById(R.id.mygallery);
           
    /*新增几ImageAdapter并设定给Gallery对象*/
    g.setAdapter(new ImageAdapter(this,getSD()));
   
    g.setOnItemSelectedListener(this);

    /*设定一个itemclickListener事件*/
    g.setOnItemClickListener(new OnItemClickListener()
    {
      public void onItemClick(AdapterView<?> parent,
                       View v, int position, long id)
      {
      Toast.makeText(BgPictureShowActivity.this, "dianjiale ", Toast.LENGTH_SHORT).show();
      }
    });
}

  private List<String> getSD()
  {
    /* 设定目前所在路径 */
    List<String> it=new ArrayList<String>();     
    File f=new File("/sdcard/"); 
    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;
  }

  /*改写BaseAdapter自定义一ImageAdapter class*/
  public class ImageAdapter extends BaseAdapter
  {
    /*声明变量*/
    int mGalleryItemBackground;
    private Context mContext;
    private List<String> lis;
   
    /*ImageAdapter的构造符*/
    public ImageAdapter(Context c,List<String> li)
    {
      mContext = c;
      lis=li;
      /* 使用res/values/attrs.xml中的<declare-styleable>定义
      * 的Gallery属性.*/
      TypedArray a = obtainStyledAttributes(R.styleable.Gallery);
      /*取得Gallery属性的Index id*/
      mGalleryItemBackground = a.getResourceId(
          R.styleable.Gallery_android_galleryItemBackground, 0);
      /*让对象的styleable属性能够反复使用*/
      a.recycle();
    }
   
    /*几定要重写的方法getCount,传回图片数目*/
    public int getCount()
    {
      return lis.size();
    }
    /*一定要重写的方法getItem,传回position*/
    public Object getItem(int position)
    {
      return position;
    }
   
    /*一定要重写的方法getItemId,传并position*/
    public long getItemId(int position)
    {
      return position;
    }
   
    /*几定要重写的方法getView,传并几View对象*/
    public View getView(int position, View convertView,
                          ViewGroup parent)
    {
      /*产生ImageView对象*/
      ImageView i = new ImageView(mContext);
      /*设定图片给imageView对象*/
      Bitmap bm = BitmapFactory.decodeFile(lis.
                            get(position).toString());
      i.setImageBitmap(bm);
      /*重新设定图片的宽高*/
      i.setScaleType(ImageView.ScaleType.FIT_XY);
      /*重新设定Layout的宽高*/
      i.setLayoutParams(new Gallery.LayoutParams(136, 88));
      /*设定Gallery背景图*/
      i.setBackgroundResource(mGalleryItemBackground);
      /*传回imageView对象*/
      return i;
    }    
  }


public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
  String  photoURL=list[position];
  Log.i("A",String.valueOf(position));

      mSwitcher.setImageURI(Uri.parse(photoURL));

}

public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub

}

public View makeView() {
    ImageView i = new ImageView(this);
    i.setBackgroundColor(0xFF000000);
    i.setScaleType(ImageView.ScaleType.FIT_CENTER);
    i.setLayoutParams(new ImageSwitcher.LayoutParams(
        LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
    return i;
}
}
这段代码很长,看的时候肯定会头疼加DAN疼,但是一定要挺住啊,MARS大神一再告诫咱们,这个行业的特点就是要有耐心。
3。对了,还有一个非常重要的事情,就是在values文件夹下面,新建一个xml,内书:
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <declare-styleable name="Gallery">
    <attr name="android:galleryItemBackground" />
  </declare-styleable>
</resources>
最后就成功了。
  • 大小: 89.8 KB
  • 大小: 121.3 KB
  • 大小: 80.6 KB
分享到:
评论
4 楼 wenjiefeng 2012-07-21  
楼主,问一下,我这里怎么报异常呢,是 OutOfMemoryErroy的异常,为什么呢,我的号是  1297234270@qq.com  帮忙一下吧
3 楼 winchun323 2012-06-02  
显示出来了,只是SDCARD根目录下的图片,谢谢了!!!
2 楼 cy86201885 2012-04-26  
为什么我显示不出来任何图片啊

相关推荐

    读取sd卡中的图片

    在Android应用开发中,有时我们需要从设备的存储卡(如SD卡)中读取图片,并将这些图片显示在一个图像库组件(Gallery)中。以下是对该需求的技术分解及实现过程的详细说明。 #### 一、检查SD卡状态 在进行任何...

    Android应用源码Gallery从SD卡中获取图片,并显示.zip

    本项目源码主要涉及的是如何从SD卡(外部存储)中读取图片并使用Gallery组件进行显示。以下是这个项目的关键知识点: 1. **Android权限管理**: 在Android中,访问SD卡需要在`AndroidManifest.xml`文件中声明`READ...

    Android读取并浏览SD Card图片示例

    在Android平台上,开发一款应用程序来读取和浏览SD Card(外部存储)中的图片是一项常见的任务。这个示例项目提供了一种方法,展示了如何实现这一功能,包括加载图片、展示图片列表以及实现前后切换图片的交互。以下...

    android gallery 图片轮播 展示SD卡下指定目录的图片 可删除

    "android gallery 图片轮播 展示SD卡下指定目录的图片 可删除"这个项目就是针对这样的场景设计的。下面将详细讲解如何实现这一功能。 首先,我们需要了解Android中的图片加载库。 glide 和 picasso 是两个常用的...

    Android读取sdcard上的图片并用Gallery显示

    本文将深入探讨如何从SDCard读取图片并将其显示在Gallery组件中,以及实现点击Gallery中的图片后全屏显示的逻辑。首先,我们需要了解Android的文件系统和权限管理。 1. Android文件系统: Android系统的外部存储...

    Android项目项目_Gallery从SD卡中获取图片,并显示.rar

    **Android Gallery:从SD卡获取图片并展示.rar文件** 本项目为一款基于Android平台的Gallery应用,用户可从SD卡中检索并查看图片,同时支持.rar格式文件的预览。项目采用Kotlin语言编写,兼容Android Studio开发...

    安卓SD卡添加图片

    7. **用户界面设计**:为了实现“浏览添加”功能,需要设计一个用户界面,可能包含一个图片列表视图(如`GridView`或`RecyclerView`)显示SD卡上的图片。`Adapter`类将数据绑定到视图,用户可以点击选择图片。 8. *...

    Gallery从SD卡中获取图片,并显示.zip

    在Android开发中,"Gallery"通常指的是一个应用或者组件,用于展示用户设备上的图片或视频。这个项目实战可能涉及到创建一个...通过这个项目,开发者可以深入理解Android存储系统和图片显示机制,提升实际开发能力。

    应用源码Gallery从SD卡中获取图片,并显示.zip

    在Android开发中,"应用源码Gallery从SD卡中获取图片,并显示.zip"是一个典型的应用场景,涉及到用户界面(UI)设计、文件系统操作以及图片显示技术。以下将详细阐述相关知识点: 1. 图片选择器(Gallery): 在...

    AndroidGallery从SD卡中获取图片,并显示.zip

    在Android应用开发中,"AndroidGallery从SD卡中获取图片,并显示"是一个常见的需求,尤其在构建相册或图片浏览类应用时。本教程将详细讲解如何实现这一功能,主要涉及以下几个关键知识点: 1. **读取SD卡权限**: ...

    Gallery从SD卡中获取图片,并显示.rar

    现在,我们需要创建一个自定义的`Adapter`,继承自`BaseAdapter`,它将处理在Gallery中的图片显示。在`getView()`方法中,我们将设置每个ImageView的Bitmap,这样Gallery就能正确显示图片: ```java public class ...

    Gallery从SD卡中获取图片,并显示_Android.rar

    本教程将深入探讨如何在Android应用中实现从SD卡(外部存储)获取图片并显示在自定义的Gallery组件中。以下是你需要了解的关键知识点: 1. **Android权限管理**: 在读取SD卡上的图片之前,需要在AndroidManifest....

    安卓Android源码——Gallery从SD卡中获取图片,并显示.rar

    本教程将深入探讨如何利用Android源码从SD卡中获取图片并显示在`Gallery`控件中。首先,我们需要理解Android对SD卡存储的访问机制,以及`Gallery`控件的工作原理。 1. **SD卡访问**: Android系统为应用提供了读写...

Global site tag (gtag.js) - Google Analytics