`
nanjingjiangbiao_T
  • 浏览: 2739950 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

利用Gallery和ImageView实现图片浏览器

 
阅读更多

首先,先看一下实现的截图:


如图所示,

其中布局的第一个控件是Gallery,显示的图片滑动浏览,这里用到一个继承自BaseAdapter的类对象,用于填充和显示Gallery中的内容;

布局的第二个控件是ImageView,当用户滑动Gallery时,显示其中的图片,这其中实现了两个重载方法

1.当用户点击Gallery的图片资源时,以Toast的形式告诉用户点击的是哪一幅图片,实现的代码如下:

 /*设定一个itemclickListener并Toast被点选图片的位置*/ 
    g.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
        Toast.makeText(EX04_10.this, getString(R.string.my_gallery_text_pre) 
            + position
            + getString(R.string.my_gallery_text_post), Toast.LENGTH_SHORT).show();
        }
      });
2.当Gallery获得焦点时,ImageView显示用户选择的是哪一幅图片,实现的代码如下:

g.setOnItemSelectedListener(new OnItemSelectedListener()
    {

      @Override
      public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
          long arg3)
      {
        // TODO Auto-generated method stub
        imageView.setImageResource(myImageIds[arg2]);
        
      }

      @Override
      public void onNothingSelected(AdapterView<?> arg0)
      {
        // TODO Auto-generated method stub
        
      }
    });


下面给出本实例用到的布局文件和具体的实现源代码:

布局文件代码:

<?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/mygallery"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
/>
<ImageView
    android:id="@+id/imageview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scaleType="center"
    />
</LinearLayout>

具体的实现代码:

public class EX04_10 extends Activity { 
  
  /*建构一Integer array并取得预加载Drawable的图片id*/ 
  private Integer[] myImageIds = { R.drawable.photo1, R.drawable.photo2, 
      R.drawable.photo3, R.drawable.photo4, 
      R.drawable.photo5, R.drawable.photo6, };
  

  
  private ImageView imageView;
  /** Called when the activity is first created. */ 
  @Override
  public void onCreate(Bundle savedInstanceState) {
    
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); 
    
    /*透过findViewById取得*/ 
    Gallery g = (Gallery) findViewById(R.id.mygallery);
    imageView=(ImageView)findViewById(R.id.imageview);
    
    /*新增一ImageAdapter并设定给Gallery对象*/
    g.setAdapter(new ImageAdapter(this)); 
    
    /*设定一个itemclickListener并Toast被点选图片的位置*/ 
    g.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
        Toast.makeText(EX04_10.this, getString(R.string.my_gallery_text_pre) 
            + position
            + getString(R.string.my_gallery_text_post), Toast.LENGTH_SHORT).show();
        }
      });
    
    g.setOnItemSelectedListener(new OnItemSelectedListener()
    {

      @Override
      public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
          long arg3)
      {
        // TODO Auto-generated method stub
        imageView.setImageResource(myImageIds[arg2]);
        
      }

      @Override
      public void onNothingSelected(AdapterView<?> arg0)
      {
        // TODO Auto-generated method stub
        
      }
    });
    }
  
  
  /*改写BaseAdapter自定义一ImageAdapter class*/ 
  public class ImageAdapter extends BaseAdapter {
    
    int mGalleryItemBackground;
    private Context mContext; 
    
    /*ImageAdapter的建构子*/ 
    public ImageAdapter(Context c) {
      mContext = c; 
      /* 使用在res/values/attrs.xml中的定义 * 的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 myImageIds.length;
      } 
    
    /*一定要重写的方法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对象*/ 
      i.setImageResource(myImageIds[position]); 
      /*重新设定图片的宽高*/
      i.setScaleType(ImageView.ScaleType.FIT_XY); 
      /*重新设定Layout的宽高*/ 
      i.setLayoutParams(new Gallery.LayoutParams(136, 110));
      /*设定Gallery背景图*/ 
      i.setBackgroundResource(mGalleryItemBackground); 
      /*传回imageView物件*/ return i;
      } 
  }
   
  }


分享到:
评论

相关推荐

    Gallery可拖动和放大图片

    总的来说,“Gallery可拖动和放大图片”是一个结合了`Gallery`滑动和图片手势操作的实例,它展示了如何在Android应用中实现高效且交互丰富的图片浏览功能。通过深入学习和理解这个示例,开发者可以为自己的应用添加...

    幻灯片式图片浏览器

    在这个demo中,开发人员利用了Android平台上的`Gallery`组件和`ImageSwitcher`组件来实现这一功能。 `Gallery`是Android SDK提供的一种视图类,它允许用户通过水平滚动来浏览一系列项目,每个项目通常代表一张图片...

    Android超炫图片浏览器代码

    总结来说,`Android超炫图片浏览器代码`项目展示了如何通过扩展`Gallery`组件并利用自定义适配器来创建具有倒影和3D效果的图片浏览器。这涉及到对`Bitmap`的处理、`Matrix`的使用以及对Android控件的深度定制。通过...

    安卓Android源码——超炫的图片浏览器.rar

    为了实现图片的缩放和平移,我们需要自定义一个ImageView或者使用开源库如Universal Image Loader或UIL。通过手势识别,我们可以实现双指缩放,单指平移等操作,增强用户交互体验。 再者,考虑到性能优化,源码可能...

    图片浏览器(可缩放)

    为了实现图片的缩放功能,开发者通常会利用Android的`ScaleGestureDetector`类,这是一个手势检测工具,可以识别用户的捏合手势,从而调整ImageView中的图片大小。结合`GestureDetector`和`Scroller`类,可以实现...

    Android自定义Gallery控件实现3D图片浏览器

    然而,通过自定义,我们仍然可以利用Gallery实现3D效果。 首先,获取手机中的图片路径是实现图片浏览器的基础。在Android中,通常我们通过访问外部存储(SD卡)来获取图片。以下是一个简单的示例,展示如何获取所有...

    android图片浏览器

    3. 滑动切换:为了实现图片间的平滑切换,通常会用到ViewPager或者Gallery组件。ViewPager可以轻松实现页面的左右滑动,配合PagerAdapter或FragmentPagerAdapter,可以加载和切换不同的图片。 4. 图片手势识别:...

    android图片浏览器的开发.doc

    本课程设计报告将详细介绍如何在嵌入式系统环境中,利用Android系统进行图片浏览器的开发。 一、课程设计目的 开发Android图片浏览器的主要目的是理解和掌握Android应用程序的基本架构和编程模型,包括UI设计、数据...

    Android 图片浏览器

    `GestureDetector`和`ScaleGestureDetector`可以帮助你识别单击、双击、滑动和缩放等手势,为图片浏览器添加更多交互功能。 通过以上知识点的学习和实践,你可以掌握如何在Android平台上开发一个功能完善的图片...

    android超炫的图片浏览器.zip

    7. **自定义View**:可能需要自定义ImageView或者Gallery来实现特定的布局和交互效果。自定义View时,要注意重写onDraw()方法,并合理利用硬件加速。 8. **图片格式支持**:考虑到不同的图片格式,如JPEG、PNG、...

    Android学习记录使用Gallery实现炫丽的拖动效果

    这篇博客"Android学习记录使用Gallery实现炫丽的拖动效果"深入探讨了如何利用`Gallery`来打造这种交互体验。 `Gallery`是Android SDK中一个非常实用的控件,它允许用户水平滑动浏览多个项目,每个项目通常代表一个...

    Android Gallery3D

    Gallery3D的用户界面简洁而直观,这在源代码中体现为对Android UI组件的使用,如ImageView、Adapter等,以及自定义View的实现,以满足3D效果的需求。 ### 9. **国际化与适配** 作为一款面向全球用户的应用,Gallery...

    Gallery3D_画廊效果Android源码.zip

    Gallery3D的核心在于它将2D的ListView扩展到了3D空间,通过平移和缩放等操作,实现了图片在3D空间中的展示。其基本结构包括以下几个部分: 1. 视图容器:Gallery3D使用ViewGroup作为基础,创建了一个可以容纳多个...

    Gallery3D.zip

    Gallery3D可能包含了自定义的View和动画效果,如自定义的ImageView来支持3D特效,或者使用ObjectAnimator和ValueAnimator实现平滑的过渡效果。 综上所述,Gallery3D.zip这个压缩包内含的源代码和资源文件展示了...

    使用Android自带的Gallery控件实现CoverFlow

    在本教程中,我们将深入探讨如何利用Android SDK中的`Gallery`控件来实现类似CoverFlow的视觉效果。 首先,`Gallery`控件是Android提供的一个视图容器,它允许用户通过水平滚动来浏览一系列子项。`CoverFlow`效果是...

    google 标准的图像浏览器源代码

    2. **图片显示与缩放**:源代码可能会包含使用Android的ImageView或自定义View来实现平滑的图片缩放和平移。这通常涉及到矩阵操作和双缓冲技术,以确保图像在放大或缩小时保持清晰。 3. **手势识别**:为了实现用户...

    Android仿QQ图片浏览

    在Android中,ImageView是用于显示单张图片的基础控件,但为了实现滑动浏览和手势操作,我们需要更强大的组件,如Gallery、ViewPager或者自定义的ScrollView。QQ图片浏览功能最可能使用的是ViewPager,因为它可以...

    android 仿照ios相册 滑动+倒影+3D+倾斜+放大

    对于图片的倾斜,我们可以调整`ImageView`的`pivotX`和`pivotY`属性,再配合`rotationY`动画,实现图片的倾斜效果。对于放大效果,可以使用`ScaleAnimation`,在图片切换时对其进行放大和缩小的动画处理,以增强...

    GalleryDemo.zip

    在`GalleryDemo`中,`Gallery`被用作图片浏览器的主体部分,用户可以通过左右滑动来浏览不同的图片。 2. **Adapter机制** `Gallery`组件的数据来源通常通过`Adapter`实现,如`BaseAdapter`或`ArrayAdapter`。在`...

    安卓的伪3D实现,用galler控件实现coverflow,里面都是可以运行的demo

    总的来说,虽然原生的Gallery控件在新版本的Android中已不再推荐使用,但通过自定义和优化,我们依然可以利用它或者其他的视图组件来实现引人注目的Cover Flow效果。这个过程涉及到Android UI编程的多个方面,包括...

Global site tag (gtag.js) - Google Analytics