Android入门之Gallery用法实例解析

 更新时间:2014年08月08日 11:39:42   投稿:shichen2014  
这篇文章主要介绍了Android入门之Gallery用法,对Android初学者有一定的参考学习价值,需要的朋友可以参考下

本文实例介绍的Android的Gallery控件是个很不错的看图控件,可以大大减轻开发者对于看图功能的开发,并且效果也很美观。本文实例中的Gallery的用法,主要实现用反射机制来动态读取资源中的图片。

该实例代码运行的效果图如下:

 

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" 
  > 
<Gallery android:id="@+id/gallery" android:layout_height="fill_parent" android:layout_width="fill_parent"></Gallery> 
</LinearLayout>

Java程序源码如下:

package com.testImageView; 
 
import java.lang.reflect.Field; 
import java.util.ArrayList; 
 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.Gallery; 
import android.widget.ImageView; 
import android.widget.AdapterView.OnItemClickListener; 
 
public class testImageView extends Activity { 
  private Gallery mGallery; 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
     
    mGallery = (Gallery)findViewById(R.id.gallery); 
    try { 
      mGallery.setAdapter(new ImageAdapter(this)); 
    } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
    mGallery.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView parent, View v, int position, long id) { 
        testImageView.this.setTitle(String.valueOf(position)); 
      } 
    }); 
  } 
   
  /* 
   * class ImageAdapter is used to control gallery source and operation. 
   */ 
  private class ImageAdapter extends BaseAdapter{ 
    private Context mContext; 
    private ArrayList<Integer> imgList=new ArrayList<Integer>(); 
    private ArrayList<Object> imgSizes=new ArrayList<Object>(); 
    public ImageAdapter(Context c) throws IllegalArgumentException, IllegalAccessException{ 
      mContext = c; 
       
      //用反射机制来获取资源中的图片ID和尺寸 
      Field[] fields = R.drawable.class.getDeclaredFields(); 
      for (Field field : fields) 
      { 
        if (!"icon".equals(field.getName()))//除了icon之外的图片 
        {   
          int index=field.getInt(R.drawable.class); 
          //保存图片ID 
          imgList.add(index); 
          //保存图片大小 
          int size[]=new int[2]; 
          Bitmap bmImg=BitmapFactory.decodeResource(getResources(),index); 
          size[0]=bmImg.getWidth();size[1]=bmImg.getHeight(); 
          imgSizes.add(size); 
        } 
      } 
    } 
    @Override 
    public int getCount() { 
      // TODO Auto-generated method stub 
 
      return imgList.size(); 
    } 
 
    @Override 
    public Object getItem(int position) { 
      // TODO Auto-generated method stub 
 
      return position; 
    } 
 
    @Override 
    public long getItemId(int position) { 
      // TODO Auto-generated method stub 
 
      return position; 
    } 
 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
 
      ImageView i = new ImageView (mContext); 
      //从imgList取得图片ID 
      i.setImageResource(imgList.get(position).intValue()); 
      i.setScaleType(ImageView.ScaleType.FIT_XY); 
      //从imgSizes取得图片大小 
      int size[]= new int[2]; 
      size=(int[]) imgSizes.get(position); 
      i.setLayoutParams(new Gallery.LayoutParams(size[0], size[1])); 
      return i; 
    } 
     
  }; 
}

相关文章

  • Android 高仿微信支付数字键盘功能

    Android 高仿微信支付数字键盘功能

    现在很多app的支付、输入密码功能,都是使用自定义数字键盘,方便实用。下面本文给大家带来了Android 高仿微信支付数字键盘功能,非常不错,感兴趣的朋友一起学习吧
    2016-08-08
  • Android实现RecyclerView下拉刷新效果

    Android实现RecyclerView下拉刷新效果

    这篇文章主要为大家详细介绍了Android实现RecyclerView下拉刷新效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Android 中 Fragment 嵌套 Fragment使用存在的bug附完美解决方案

    Android 中 Fragment 嵌套 Fragment使用存在的bug附完美解决方案

    本文从两个方面浅析Android 中 Fragment 嵌套 Fragment使用存在的bug问题,原因找到就可以完美的解决了,对fragment嵌套fragment使用相关知识感兴趣的朋友一起看看吧
    2016-08-08
  • 一个Activity中多个Fragment的切换

    一个Activity中多个Fragment的切换

    经常会遇到在一个activity界面上布局多个fragment,但是如何从一个fragment跳转到另一个fragment呢?本文主要对一个Activity中多个Fragment的切换进行介绍,下面跟着小编一起来看下吧
    2017-01-01
  • 详解Android Studio Git分支实践

    详解Android Studio Git分支实践

    这篇文章主要介绍了Android Studio Git分支实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • android Textview文字监控(Textview使用方法)

    android Textview文字监控(Textview使用方法)

    以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能
    2013-11-11
  • 浅析Android加载字体包及封装的方法

    浅析Android加载字体包及封装的方法

    这篇文章主要介绍了Android加载字体包及封装的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Android6.0 Launcher2应用解析

    Android6.0 Launcher2应用解析

    这篇文章主要为大家详细介绍了Android6.0 Launcher2应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Flutter实现笑嘻嘻的动态表情的示例代码

    Flutter实现笑嘻嘻的动态表情的示例代码

    这篇文章主要为大家介绍了如何利用Flutter实现笑嘻嘻的动态表情,文中的示例代码讲解详细,对我们学习Flutter有一定帮助,感兴趣的可以了解一下
    2022-04-04
  • Android仿微信进度弹出框的实现方法

    Android仿微信进度弹出框的实现方法

    最近公司项目需要实现类似微信进度条弹出框效果,其实现方法并不难,下面给大家介绍下Android仿微信进度弹出框的实现方法,需要的朋友参考下吧
    2017-01-01

最新评论