`
hoyee1223
  • 浏览: 12723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Android开发中Gallery的使用方法及技巧说明

阅读更多

很多人会知道iphone可以用手指直接拖动图片移动,这个效果让苹果吸引了很多人的眼球,同时也为它积攒了很多粉丝,现在Android也可以通过Gallery来实现这一效果。
要实现这样的效果,必须事先要准备好你们要展示的图片,今天我们通过Gallery来实现滚动选择菜单,我们最好选择用一样规格的图片,这样切换起来效果上比较好,还有最好选择一些透明背景的PNG格式的图片,配上我们自己选择的背景,这样效果会更加完美,我们选择好了我们需要的图片后,需要用一个容器来存放这些要显示的图片,这里我们需要使用一个继承自BaseAdapter类的一个派生类来装这些图片,我们做的是滚动菜单所以要设置这些图片的监听事件,这样才能知道用户点击的是哪一张图片,当然添加监听事件的方法有很多。我们在继承BaseAdapter类编写自己的适配器的时候我们将所有要显示的图片的索引值存放在一个int数组中,然后我们通过setImageResource方法来设置ImageView要显示的图片资源,最后将每一张图片显示在屏幕上面。
同时我们还要实现无限向后延伸滑动的效果。
以下是全部代码:

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"
 
    android:layout_gravity="center_vertical"
 
    >
 
<Gallery
 
   android:layout_width="320dip"
 
   android:layout_height="wrap_content"
 
   android:layout_gravity="center_horizontal"
 
   android:id="@+id/gallery"/>
 
   
 
</LinearLayout>
 

 

ImageAdaper.java

package com.e7android.forum.test;
 

import android.content.Context;
 
import android.graphics.drawable.BitmapDrawable;
 
import android.view.View;
 
import android.view.ViewGroup;
 
import android.widget.BaseAdapter;
 
import android.widget.Gallery;
 
import android.widget.ImageView;
 

public class ImageAdaper extends BaseAdapter {
 


        private Context context;
 
        private boolean[] selectFlags;
 
        private Integer[] mImageIds = 
        {
 
                        R.drawable.bu1,
 
                        R.drawable.bu2,
 
                        R.drawable.bu3,
 
                        R.drawable.bu4,
 
                        R.drawable.bu5,
 
                        R.drawable.bu6,
 
                        R.drawable.bu7,
 
                        R.drawable.bu8,
 
        };
 
        
        public ImageAdaper(Context context) {
 
                this.context = context;
 
                selectFlags = new boolean[mImageIds.length];
 
                //为每一个图标设置初始化标志位用来表示该图是否被选择了
 
                for(int i=0;i<mImageIds.length;i++)
 
                {
 
                        selectFlags[i] = false;
 
                }
 
        }
 
        /**
 
         * return 返回指定位置的图标是否被选择的标志位
 
         */
 
        public boolean getSelectedFlags(int position)
 
     {
 
                return selectFlags[position%mImageIds.length];
 
     }
 
        /**
 
         * 
         * @param position 目标位置
 
         *
 
         * @param flags 标志位
 
         * 设置目标位置的标志位
 
         */
 
        public void setSelectedFlags(int position,boolean flags)
 
        {
 
                selectFlags[position%mImageIds.length]=flags;
 
        }
 

        public int getCount() {
 
                return Integer.MAX_VALUE;//返回一个整型的大数值,用来制作无限循环的效果
 
        }
 

        @Override
 
        public Object getItem(int position) {
 
                // TODO Auto-generated method stub
 
                return position% mImageIds.length;
 
        }
 

        @Override
 
        public long getItemId(int position) {
 
                // TODO Auto-generated method stub
 
                return position% mImageIds.length;
 
        }
 

        @Override
 
        public View getView(int position, View convertView, ViewGroup parent) {
 
                ImageView imageView = new ImageView(context);
 
                /**
 
                 * 做无限循环的效果
 
                 */
 
                if(position<0)
 
                {
 
                        position+=mImageIds.length;
 
                }
 
                imageView.setImageResource(mImageIds[position%mImageIds.length]);
 
                imageView.setLayoutParams(new Gallery.LayoutParams(100,80));
 
                imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
 
                //假如该图被选择设置它的背景来显示
 
                if(getSelectedFlags(position))imageView.setBackgroundDrawable((BitmapDrawable)context.getResources().getDrawable(R.drawable.selected));
 
                return imageView;
 
        }
 

}

 

下面是程序运行的效果:
更多Android开发学习资料更多Android开发学习资料

分享到:
评论
2 楼 hoyee1223 2011-02-24  
我什么时候多写点这些东西
1 楼 贫僧不吃肉 2011-02-22  
正好在学Android有用,标记一下~~楼主辛苦了,加油~

相关推荐

    android中的gallery倒影样式

    在Android开发中,`Gallery`组件是用于展示一系列图片或视图的一种滚动控件,它允许用户通过左右滑动来浏览各个项目。然而,`Gallery`已经在API Level 17(Android 4.2)中被弃用,取而代之的是更现代的`ViewPager`...

    Android 自定义ListView + Gallery 组合

    在Android开发中,ListView和Gallery是两种常用的布局控件,它们可以用来展示大量的数据并提供良好的用户交互体验。本文将详细讲解如何在Android应用中实现自定义的ListView与Gallery组合,以及这两个组件的核心特性...

    Android 使用Gallery_tabhost实现标签效果图源码.rar

    在Android开发中,`Gallery`和`TabHost`是两种常用的UI组件,它们可以用于创建丰富多样的用户界面。在这个项目中,`Android 使用Gallery_tabhost实现标签效果图源码.rar`是一个示例,展示了如何结合这两个组件来创建...

    android gallery demo

    总的来说,`Gallery`是Android开发中一个有趣的组件,虽然在新的Android版本中被其他组件所替代,但它的原理和使用技巧对于理解Android UI设计仍然有价值。通过实践和学习,开发者可以更好地掌握Android界面的构建和...

    android gallery 3D效果

    在Android平台上,`Gallery`组件曾经是实现3D滚动效果的一种流行方式,它允许用户以...现代Android开发通常会使用`ViewPager`配合`PageTransformer`来实现类似的3D翻页效果,这不仅更高效,而且有更好的性能和兼容性。

    android 带有 动画 效果 的 Gallery 控件

    在Android开发中,`Gallery`控件是一种非常实用的组件,它允许用户通过左右滑动来展示一系列的项目,常用于图片轮播、菜单选择等场景。然而,原生的`Gallery`控件在Android API 17之后就被废弃了,但通过一些技巧和...

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

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

    android开发资料大全

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

    Android Gallery用法(自定义边框+底部小圆点)

    在Android开发中,`Gallery`组件是一个非常有用的控件,常用于实现图片或者视图的轮播效果。本文将深入探讨如何自定义`Gallery`,包括添加自定义边框、设置底部小圆点以及实现自动切换功能。我们将通过分析`...

    安卓Android源码——Gallery3D.zip

    《深入剖析Android Gallery3D源码》 在Android操作系统中,Gallery3D是一款经典的图片浏览应用,它以其高效、流畅的用户体验而广...通过学习和实践,开发者能够掌握更高级的Android开发技巧,创造出更优秀的应用程序。

    android4.2应用程序源码之Gallery2

    在Android系统中,Gallery2是用于展示图片和视频的原生应用,主要负责提供用户界面以及与媒体库的交互。这个应用在Android 4.2版本中被广泛使用,因此对于开发者来说,深入理解其源码是提升Android UI设计和多媒体...

    安卓Android源码——gallery重叠特效源码+注释.zip

    在安卓开发中,"gallery"组件是早期Android SDK中用于展示可滚动图片或视图的控件,类似于iOS中的carousel效果。然而,随着Android版本的更新,Gallery组件在API Level 17(Android 4.2)后已被弃用,取而代之的是更...

    Android Gallery实例源码

    在Android开发中,Gallery组件常用于实现图片轮播或者选择多张图片等场景。这份"Android Gallery实例源码"正是为了帮助开发者深入理解并掌握这一组件的使用和自定义。 源码分析: 1. **组件结构**:Gallery组件...

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

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

    Android核心技术开发与实例详解—目录.pdf

    - **4.2.3 9-Patch图片简介**:说明9-Patch图片的制作方法及其在Android中的应用。 - **4.2.3 9-Patch图片使用案例**:通过实例展示9-Patch图片的应用技巧。 - **4.3 状态开关按钮** - **4.3.1 ToggleButton类...

    Gallery android2.3源码

    此外,源码还展示了如何高效地处理触摸事件,以及如何利用缓动函数实现平滑滚动,这些都是Android开发中的重要技巧。 总结 通过分析Android 2.3 Gallery组件的源码,我们可以深入了解其工作原理,这对于优化用户...

    Android4.4图库Gallery2源码

    总结,Android 4.4图库Gallery2源码虽然不能直接运行,但它揭示了Android系统中媒体管理的高级技巧和最佳实践。通过对源码的深入学习,开发者可以提升对Android系统的理解,掌握高效的数据管理、视图渲染、用户交互...

    Android开发各种demo集合

    以上仅是部分Android开发经典Demo的介绍,它们不仅包含了丰富的技术知识点,还提供了实用的开发技巧和经验分享。通过学习这些Demo,开发者不仅可以深入了解Android开发的核心技术,还能获得灵感,提高自己的开发水平...

    Android2.3.3图库Gallery3D源码带Eclispe工程直接编译

    在Android开发领域,理解系统自带应用的源码是提升技术水平的重要途径。本文将深入剖析Android 2.3.3版本中的图库应用——Gallery3D的源码,帮助开发者了解其工作原理,从而更好地运用到自己的项目中。 Gallery3D是...

Global site tag (gtag.js) - Google Analytics