`

6.1.6 Gallery结合案例详解

阅读更多
Gallery(相册)控件是个很不错的图片查看控件,屏幕中有一个图片列表,Gallery类的继承关系如下:
java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.widget.AdapterView<T extends android.widget.Adapter>
         ↳ android.widget.AbsSpinner
           ↳ android.widget.Gallery
这个Gallery案例,可以用手滑动Gallery,当用户点击某个图片弹出一个Toast,如6-11图:
 


6-11 Gallery控件使用效果图
程序代码请参考代码清单6-9:
【代码清单6-9】 chapter6_5/src/com/work/GalleryActivity.java
public class GalleryActivity extends Activity {
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Gallery g = (Gallery) findViewById(R.id.gallery);
        g.setAdapter(new ImageAdapter(this));
        g.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView parent, View v, int position, long id) {
                Toast.makeText(GalleryActivity.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });
        
        registerForContextMenu(g);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        menu.add(R.string.gallerytext);
    }
    
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        Toast.makeText(this, "Longpress: " + info.position, Toast.LENGTH_SHORT).show();
        return true;
    }

    public class ImageAdapter extends BaseAdapter {
        int mGalleryItemBackground;
        
        public ImageAdapter(Context c) {
            mContext = c;
            TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
            mGalleryItemBackground = a.getResourceId(
                    R.styleable.Gallery1_android_galleryItemBackground, 0);
            a.recycle();
        }

        public int getCount() {
            return mImageIds.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {        	
			ImageView imageView;
			imageView = new ImageView(mContext);
			imageView.setImageResource(mImageIds[position]);
			imageView.setScaleType(ImageView.ScaleType.FIT_XY);
			imageView.setLayoutParams(new Gallery.LayoutParams(136, 88));
			imageView.setBackgroundResource(mGalleryItemBackground);
			return imageView;
        }

        private Context mContext;

        private Integer[] mImageIds = {
                R.drawable.beijing,
                R.drawable.changsha,
                R.drawable.chengdu,
                R.drawable.chongqing,
                R.drawable.haerbing,
                R.drawable.jinan,
                R.drawable.jiujiang,
                R.drawable.kunming,
                R.drawable.nanjing
        };
    }
}

代码的关键的地方是实现BaseAdapter适配器类——ImageAdapter,其中关键是getView()实现。在convertView为null时候实例化控件,imageView.setLayoutParams(new GridView.LayoutParams(136, 88)是设置一个单元格中图片的大小是136×88像素。imageView.setScaleType(ImageView.ScaleType.FIT_XY) 缩放图片使用FILL方式。imageView.setImageResource(mImageIds[position])为图片控件设置图片。
在布局文件/chapter6_5/res/layout/main.xml中添加Gallery控件:
<?xml version="1.0" encoding="utf-8"?>
<Gallery xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gallery"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
/>

本例中设置图片的背景样式是边框样式,如图6-12。
 


图6-12 图片背景样式
imageView.setBackgroundResource(mGalleryItemBackground)语句就是设定样式的,成员变量mGalleryItemBackground是在ImageAdapter的构造方法中初始化的。
public ImageAdapter(Context c) {
			mContext = c;
			TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
			mGalleryItemBackground = a.getResourceId(
					R.styleable.Gallery1_android_galleryItemBackground, 0);
			a.recycle();
		}

mGalleryItemBackground是与galleryItemBackground背景资源绑定的id值,这个id对应的galleryItemBackground属性就是设定带有边框的背景样式。
此外还要在chapter6_5/res/values/目录下面创建一个attrs.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="Gallery1">
        <attr name="android:galleryItemBackground" />
    </declare-styleable>
</resources>

这是一个自定义控件属性的xml文件。但是在Android1.0时候没有这么麻烦,而是如下方式实现:
public ImageAdapter(Context c) {
        mContext = c;
        TypedArray a = obtainStyledAttributes(android.R.styleable.Theme);
        mGalleryItemBackground = a.getResourceId(
                android.R.styleable.Theme_galleryItemBackground, 0);
        a.recycle();
}

android.R.styleable.Theme_galleryItemBackground 属性在Android1.0是可以访问的,而在Android1.0之后就不能访问了,而要通过本例的方式获得galleryItemBackground的id值。
                                                                   出自《Android开发案例驱动教程》
  • 大小: 24.1 KB
  • 大小: 16.8 KB
分享到:
评论

相关推荐

    Dolphin 6.1.6

    《Dolphin 6.1.6:探索高级模拟器技术》 Dolphin 6.1.6 是一个强大的游戏模拟器,专为在个人计算机上运行GameCube和Wii游戏而设计。这款软件的独特之处在于它允许用户在PC平台上体验原本只能在专用游戏机上玩到的...

    moto 刷机 RSDLite6.1.6.msi

    moto 刷机 RSDLite6.1.6.msi

    jetty6.1.6-2

    Jetty 6.1.6 是一个开源的、轻量级的Java Web服务器和Servlet容器。这个版本的Jetty发布于较早时期,但它的设计理念和功能仍然对理解Web服务器和Servlet容器的工作原理有很大帮助。Jetty在设计时强调了性能、可嵌入...

    最新版windows VirtualBox-6.1.6-137129-Win.exe

    最新版windows VirtualBox-6.1.6-137129-Win.exe

    Dolphin-v.6.1.6

    总之,Dolphin-v.6.1.6是一个全面的交友网站解决方案,涉及了Web开发的多个层面,包括后端编程、数据库管理、用户体验设计、安全性以及系统集成。开发者可以通过学习和研究这些文件,提升自己的技能,并构建出个性化...

    lettuce-core-6.1.6.RELEASE-API文档-中文版.zip

    赠送jar包:lettuce-core-6.1.6.RELEASE.jar; 赠送原API文档:lettuce-core-6.1.6.RELEASE-javadoc.jar; 赠送源代码:lettuce-core-6.1.6.RELEASE-sources.jar; 赠送Maven依赖信息文件:lettuce-core-6.1.6....

    intel ipp6.1.6sample

    **Intel IPP 6.1.6 Sample 知识点详解** Intel Integrated Performance Primitives (IPP) 是一套跨平台的库,旨在加速计算密集型任务,尤其是针对Intel处理器进行了优化。IPP 6.1.6是该库的一个版本,提供了丰富的...

    mysql-connector-c-6.1.6-win32下载

    标题提到的"mysql-connector-c-6.1.6-win32"是指针对Windows 32位系统的MySQL Connector/C 6.1.6版本的下载。这个版本的驱动程序支持与MySQL服务器进行通信,以便开发人员可以在他们的C程序中执行SQL查询、管理数据...

    MySQL驱动 mysql-connector-net-6.1.6

    3. **数据适配器和数据集**:` MySqlDataAdapter `类结合` MySqlCommand `和` DataTable `,实现数据的填充、检索和更新。数据集(DataSet)提供离线数据操作能力,可以缓存数据库中的数据,进行增删改查操作。 4. ...

    ios6.1.6最后的微信

    因为我想下载一个DELL windowsxp系统 所以只能要3C币 原版ios6微信

    jetty-management-6.1.6rc0.jar

    jetty-management-6.1.6rc0.jar

    jira-greenhopper-plugin-6.1.6

    jira-greenhopper-plugin-6.1.6

    BoonEx_Dolphin-Patch-v.6.1.6

    【BoonEx Dolphin-Patch-v.6.1.6】是一个针对SNS(社交网络服务)平台BoonEx Dolphin的版本升级补丁。这个补丁主要用于将系统从Dolphin-v.6.1.5更新到Dolphin-v.6.1.6,确保用户能够享受到最新版本的功能和安全修复...

    mysql-connector-c-6.1.6-win32

    在“mysql-connector-c-6.1.6-win32”这个压缩包中,我们关注的是MySQL Connector/C的6.1.6版本,特别为Windows 32位操作系统设计。 MySQL Connector/C是MySQL AB公司(现在是Oracle公司的一部分)开发的,它是...

    cs-6.1.6的安装包

    cs_6.1.6

    mysql-connector-c-6.1.6-winx64.zip

    标题中的"mysql-connector-c-6.1.6-winx64.zip"指的是这个压缩包包含了适用于Windows 64位系统的MySQL Connector/C的版本6.1.6。 MySQL Connector/C的主要功能包括: 1. **数据存取**:通过提供标准的API(如ODBC...

    seafile-6.1.6开源云盘

    Seafile是一个开源、专业、可靠的云存储平台;解决文件集中存储、共享和跨平台访问等问题,由北京海文互知网络有限公司开发,发布于2012年10月;除了一般网盘所提供的云存储以及共享功能外,Seafile还提供消息通信、...

    TiDB数据库 v6.1.6.zip

    **TiDB数据库 v6.1.6:分布式NewSQL数据库详解** TiDB(Tencent-InsightDB)是一款开源的、分布式的关系型数据库,它具备水平扩展和强一致性的特点,设计灵感来源于Google的Spanner和F1系统。TiDB v6.1.6是其发展的...

    DSM_DS3617xs_6.1.6_15266 引导文件

    标题中的"DSM_DS3617xs_6.1.6_15266 引导文件"指的是Synology DiskStation Manager (DSM) 的一个特定版本引导程序,适用于型号为DS3617xs的Synology NAS设备。DSM是Synology公司为其NAS产品开发的操作系统,提供了...

    citespace-6.1.6最新版

    citespace-6.1.6最新版

Global site tag (gtag.js) - Google Analytics