欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 组件Gallery和GridView示例讲解

程序员文章站 2024-03-05 20:03:13
android gallery和gridview组件: gallery 画廊 gallery是一个内部元素可以水平滚动,并且可以把当前选择的子元素定位在它中心的布局...

android gallery和gridview组件:

gallery 画廊

gallery是一个内部元素可以水平滚动,并且可以把当前选择的子元素定位在它中心的布局组件。

我们还是直接看看例子的运行效果。

Android 组件Gallery和GridView示例讲解

下面上代码,相关解释都放在代码里了。

1、建立一个新项目 hellogallery

2、拷贝wallpaper_0.jpg…wallpaper_9.jpg 10个图片文件到res/drawable目录

3、res/layout/main.xml文件的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<framelayout android:layout_height="fill_parent" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/framelayout01">
<imageview android:layout_height="fill_parent" android:layout_width="fill_parent" android:id="@+id/imageview01" android:src="@drawable/wallpaper_0">
</imageview>

<gallery android:layout_height="wrap_content" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gallery01" android:spacing="5dp">
</gallery>
</framelayout>

其中我们使用framelayout来实现叠加效果,使用imageview来显示大图,gallery来展示画廊,android:spacing="5dp" 属性则是用来设置元素之间的间隔。

4、在res/values/目录中新建一个attrs.xml内容如下:

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

5、在mainhellogallery.java中的内容如下:

package android.basic.lesson13;

import android.app.activity;
import android.content.context;
import android.content.res.typedarray;
import android.os.bundle;
import android.view.view;
import android.view.viewgroup;

import android.widget.adapterview;
import android.widget.adapterview.onitemclicklistener;
import android.widget.baseadapter;
import android.widget.gallery;
import android.widget.imageview;
import android.widget.toast;

public class mainhellogallery extends activity {

  /** called when the activity is first created. */
  @override
  public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.main);

    //定义ui组件
    final imageview iv= (imageview)findviewbyid(r.id.imageview01);
    gallery g = (gallery) findviewbyid(r.id.gallery01);

    //设置图片匹配器
    g.setadapter(new imageadapter(this));

    //设置adapterview点击监听器,gallery是adapterview的子类
    g.setonitemclicklistener(new onitemclicklistener() {

      @override
      public void onitemclick(adapterview<?> parent, view view,
          int position, long id) {
        //显示点击的是第几张图片
        toast.maketext(mainhellogallery.this, "" + position,
            toast.length_long).show();
        //设置背景部分的imageview显示当前item的图片
        iv.setimageresource(((imageview)view).getid());
      }
    });
  }

  //定义继承baseadapter的匹配器
  public class imageadapter extends baseadapter {

    //item的修饰背景
    int mgalleryitembackground;

    //上下文对象
    private context mcontext;

    //图片数组
    private integer[] mimageids = { r.drawable.wallpaper_0,
        r.drawable.wallpaper_1, r.drawable.wallpaper_2,
        r.drawable.wallpaper_3, r.drawable.wallpaper_4,
        r.drawable.wallpaper_5, r.drawable.wallpaper_6,
        r.drawable.wallpaper_7, r.drawable.wallpaper_8,
        r.drawable.wallpaper_9 };

    //构造方法
    public imageadapter(context c){
      mcontext = c;
      //读取styleable资源
    typedarray a = obtainstyledattributes(r.styleable.hellogallery);
    mgalleryitembackground = a.getresourceid(
      r.styleable.hellogallery_android_galleryitembackground, 0);
    a.recycle();

    }

    //返回项目数量
    @override
    public int getcount() {
      return mimageids.length;
    }

    //返回项目
    @override
    public object getitem(int position) {
      return position;
    }

    //返回项目id
    @override
    public long getitemid(int position) {
      return position;
    }

    //返回视图
    @override
    public view getview(int position, view convertview, viewgroup parent) {

      imageview iv = new imageview(mcontext);
      iv.setimageresource(mimageids[position]);
      //给生成的imageview设置id,不设置的话id都是-1
      iv.setid(mimageids[position]);
      iv.setlayoutparams(new gallery.layoutparams(120, 160));
      iv.setscaletype(imageview.scaletype.fit_xy);
      iv.setbackgroundresource(mgalleryitembackground);
      return iv;
    }

  }
}

我们点击某一张图片,会把该子元素的图片显示在放在后面一层的imageview组件中。有兴趣的同学可以了解一下adapterview的继承关系:

Android 组件Gallery和GridView示例讲解

以上就是对android gallery 和 gridview 组件的介绍,后续继续对相关知识补充,谢谢大家对本站的支持!