`
king_tt
  • 浏览: 2249022 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【Android 开发教程】Gallery和ImageView

 
阅读更多

本章节翻译自《Beginning-Android-4-Application-Development》,如有翻译不当的地方,敬请指出。

原书购买地址http://www.amazon.com/Beginning-Android-4-Application-Development/dp/1118199545/


Gallery可以显示一系列的图片,并且可以横向滑动。下面展示如何使用Gallery去显示一系列的图片。

1. 创建一个工程,Gallery。

2. main.xml中的代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Images of San Francisco" />    
    
    <Gallery
        android:id="@+id/gallery1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/image1"
        android:layout_width="320dp"
        android:layout_height="250dp"
        android:scaleType="fitXY" />

</LinearLayout>
3. 在res/values文件夹下面新建一个文件,attrs.xml。

4. attrs.xml中的代码。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="Gallery1">
        <attr name="android:galleryItemBackground" />
    </declare-styleable>
</resources>

5. 准备一些图片。将这些图片放在res/drawable-mdpi下面。


6. GalleryActivity.java中的代码。

public class GalleryActivity extends Activity {	
    Integer[] imageIDs = {
            R.drawable.pic1,
            R.drawable.pic2,
            R.drawable.pic3,
            R.drawable.pic4,
            R.drawable.pic5,
            R.drawable.pic6,
            R.drawable.pic7
    };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Gallery gallery = (Gallery) findViewById(R.id.gallery1);

        gallery.setAdapter(new ImageAdapter(this));
        gallery.setOnItemClickListener(new OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> parent, View v,
            int position, long id)
            {
                Toast.makeText(getBaseContext(),
                        "pic" + (position + 1) + " selected",
                        Toast.LENGTH_SHORT).show();
                
                ImageView imageView = (ImageView) findViewById(R.id.image1);
                imageView.setImageResource(imageIDs[position]);
            }
        });
    }
    
    public class ImageAdapter extends BaseAdapter
    {
        Context context;
        int itemBackground;

        public ImageAdapter(Context c)
        {
            context = c;
            //---setting the style---
            TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);            
            
            itemBackground = a.getResourceId(
                R.styleable.Gallery1_android_galleryItemBackground, 0);                
            
            a.recycle();
        }

        //---returns the number of images---
        public int getCount() {
            return imageIDs.length;
        }

        
        //---returns the item---
        public Object getItem(int position) {
            return position;
        }

         //---returns the ID of an item---
        public long getItemId(int position) {
            return position;
        }      
        
        //---returns an ImageView view---
        public View getView(int position, View convertView, ViewGroup parent) {
        	ImageView imageView;
            if (convertView == null) {
            	imageView = new ImageView(context);
                imageView.setImageResource(imageIDs[position]);
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                imageView.setLayoutParams(new Gallery.LayoutParams(150, 120));                	
            } else {
            	imageView = (ImageView) convertView;
            }            
            imageView.setBackgroundResource(itemBackground);
            return imageView;
        }
    }

}

7. 按F11在模拟器上面调试。会看见一系列的图片,这些图片可以左右滑动。当单击单个图片的时候,会弹出消息。


首先,我们在main.xml中添加Gallery和ImageView控件:

<Gallery
    android:id="@+id/gallery1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

<ImageView
    android:id="@+id/image1"
    android:layout_width="320dp"
    android:layout_height="250dp"
    android:scaleType="fitXY" />
前面已经提到过,Gallery用来显示一系列的图片,ImageView用来显示被选中的图片。

这些图片的id被保存在imageIDs数组中:

    Integer[] imageIDs = {
            R.drawable.pic1,
            R.drawable.pic2,
            R.drawable.pic3,
            R.drawable.pic4,
            R.drawable.pic5,
            R.drawable.pic6,
            R.drawable.pic7
    };
接下来创建BaseAdapter的子类:ImageAdapter,这样一来,我们就能把Gallery与图片资源绑定在一起了。这个适配器起到了桥梁的作用。

使用BaseAdapter的视图的还有:

  • ListView
  • GridView
  • Spinner
  • Gallery

BaseAdapter也有一些子类:

  • ListAdapter
  • ArrayAdapter
  • CursorAdapter
  • SpinnerAdapter

在ImageAdapter中我们主要实现以下的方法:

public class ImageAdapter extends BaseAdapter
    {
        Context context;
        int itemBackground;

        public ImageAdapter(Context c)
        {
            context = c;
            //---setting the style---
            TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);            
            
            itemBackground = a.getResourceId(
                R.styleable.Gallery1_android_galleryItemBackground, 0);                
            
            a.recycle();
        }

        //---returns the number of images---
        public int getCount() {
            return imageIDs.length;
        }

        
        //---returns the item---
        public Object getItem(int position) {
            return position;
        }

         //---returns the ID of an item---
        public long getItemId(int position) {
            return position;
        }      
        
        //---returns an ImageView view---
        public View getView(int position, View convertView, ViewGroup parent) {
        	ImageView imageView;
            if (convertView == null) {
            	imageView = new ImageView(context);
                imageView.setImageResource(imageIDs[position]);
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                imageView.setLayoutParams(new Gallery.LayoutParams(150, 120));                	
            } else {
            	imageView = (ImageView) convertView;
            }            
            imageView.setBackgroundResource(itemBackground);
            return imageView;
        }
    }


分享到:
评论

相关推荐

    Android开发案例驱动教程 配套代码

    《Android开发案例驱动教程》 配套代码。 注: 由于第12,13,14章代码太大,无法上传到一个包中。 这三节代码会放到其他压缩包中。 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式...

    android开发资料大全

    新版Android开发教程及笔记-完整版 《Android中文教程》中文版 《android基础教程合集》 Android实例教程 会员贡献索引贴 实用Android开发工具和资源精选 APK权限大全 - Android必懂知识 最无私的Android资料...

    Android HorizontalScrollView实现横向Gallery

    在Android开发中,HorizontalScrollView是一种常用的布局控件,它允许用户水平滚动其内部的子视图。本教程将深入探讨如何利用HorizontalScrollView实现一个类似Gallery的功能,为用户提供一种横向浏览内容的方式。 ...

    android 动态向Gallery中添加图片及倒影&&3D;效果

    在Android开发中,`Gallery`组件是一个非常有趣的控件,它可以用来展示一系列的图片或其它内容,用户可以左右滑动来浏览。本教程将详细讲解如何动态地向`Gallery`中添加图片,并实现倒影与3D翻转效果,使应用的用户...

    《老罗Android开发视频教程》源码

    《老罗Android开发视频教程》源码是一套专注于Android应用开发的教学资源,旨在帮助开发者深入理解和实践Android平台上的编程技术。在这个教程中,"gallery"控件是一个重要的学习焦点,它是一个可以展示图像轮播的...

    Android++gallery实现选中放大的效果

    在Android开发中,`Gallery`组件是一个非常有用的控件,它允许用户在水平方向上滚动浏览一系列项目,常用于图片或联系人选择等场景。在本教程中,我们将探讨如何在`Gallery`中实现选中时放大的效果,以提供更好的...

    Android3D画廊Gallery实现无限循环和自动跳转

    在Android开发中,3D Gallery是一种独特且引人入胜的图像展示方式,它通过模拟3D空间中的图片浏览,给用户带来更加生动的交互体验。本教程将深入讲解如何在Android应用中实现一个3D画廊(Gallery)组件,支持无限...

    031_android UI组件之 Gallery画廊控件

    2. 创建一个适配器,例如使用ImageView和ArrayAdapter: ```java ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter(this, android.R.layout.simple_gallery_item, imageList); gallery.setAdapter(adapter); ``` ...

    Gallery使用教程——尝试翻译一篇Android SDK Reference

    在Android开发中,"Gallery"组件是用于展示图像的一个旧版控件,它允许用户通过水平滑动来浏览多张图片。这篇博客“Gallery使用教程——尝试翻译一篇Android SDK Reference”可能详细解释了如何在应用中集成并使用这...

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

    在Android开发中,`Gallery`控件是一种非常实用的组件,它可以用来展示一系列横向滑动的项目,类似于图片轮播或者iOS中的CoverFlow效果。在本教程中,我们将深入探讨如何利用Android SDK中的`Gallery`控件来实现类似...

    Android Gallery控件使用实例

    在Android开发中,Gallery控件是一个非常实用的组件,它允许用户通过左右滑动来浏览一系列的项目,常用于图片轮播、菜单选择等场景。本教程将深入讲解如何在Android应用中使用Gallery控件,并提供一个实际的使用示例...

    android中进行图片的3D效果以及倒影效果

    在Android开发中,实现图片的3D效果及倒影效果是一项常见的需求,这可以为用户带来更丰富的视觉体验。在本教程中,我们将探讨如何在Android应用中创建这些特效,特别是针对`Gallery`组件的使用。 首先,让我们了解`...

    使用Gallery做出图片层叠效果

    在Android开发中,`Gallery`控件是一种古老但功能强大的组件,主要用于展示一系列的视图,如图片或小图标,并允许用户左右滑动来选择不同的项目。本教程将深入讲解如何利用`Gallery`控件创建出类似iPhone音乐播放器...

    Android Gallery3D效果 教程 案例 代码

    在Android开发中,`Gallery3D`是一种实现3D效果的滚动视图,它允许用户在多个项目之间进行平滑的3D切换,通常用于图片画廊或应用选择器等场景。下面我们将深入探讨如何创建和自定义一个Android `Gallery3D`效果。 ...

    gallery实现图片的展示

    在Android开发中,`Gallery`组件是一个非常实用的控件,用于实现图片或者视图的横向滑动展示。`Gallery`允许用户通过左右滑动来查看位于屏幕两侧的部分内容,从而提供了一种高效的浏览方式。在本教程中,我们将深入...

    Android新手入门2016(15)--Gallery画廊

    因此,虽然`Gallery`在早期的Android开发中占有一定地位,但现在的学习者更应该关注`ViewPager`和`HorizontalScrollView`等替代方案。 总的来说,了解`Gallery`可以帮助我们理解早期Android UI设计的思路,同时也能...

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

    在安卓开发中,`Gallery`组件是一个非常实用的控件,它允许用户通过左右滑动来浏览和选择图片或项目。本教程将深入探讨如何利用Android源码从SD卡中获取图片并显示在`Gallery`控件中。首先,我们需要理解Android对SD...

    Android--开发--Gallery从SD卡中获取图片,并显示.rar

    在Android应用开发中,"Gallery"通常指的是一个用于展示图像的控件,用户可以通过左右滑动来浏览图片。本教程将聚焦于如何从SD卡(外部存储)中获取图片并用Gallery显示。以下是对这个主题的详细讲解: 1. **...

    Android完美自定义RecyclerView实现类似Gallery的相册效果

    在Android开发中,RecyclerView是一个非常重要的组件,它用于展示可滚动的数据列表,具有高效和灵活的特性。在本教程中,我们将深入探讨如何利用RecyclerView来实现一个类似Gallery的相册效果,提供用户友好的图像...

Global site tag (gtag.js) - Google Analytics