android Gallery

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

本文的效果图:

main.xml源码:

[xhtml] view plaincopyprint?

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <Gallery android:id="@+id/gallery" android:layout_height="fill_parent" android:layout_width="fill_parent"></Gallery>
  8. </LinearLayout>

程序源码:

[java] view plaincopyprint?

  1. package com.testImageView;
  2. import java.lang.reflect.Field;
  3. import java.util.ArrayList;
  4. import android.app.Activity;
  5. import android.content.Context;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;
  8. import android.os.Bundle;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.AdapterView;
  12. import android.widget.BaseAdapter;
  13. import android.widget.Gallery;
  14. import android.widget.ImageView;
  15. import android.widget.AdapterView.OnItemClickListener;
  16. public class testImageView extends Activity {
  17. private Gallery mGallery;
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.main);
  22. mGallery = (Gallery)findViewById(R.id.gallery);
  23. try {
  24. mGallery.setAdapter(new ImageAdapter(this));
  25. } catch (IllegalArgumentException e) {
  26. // TODO Auto-generated catch block
  27. e.printStackTrace();
  28. } catch (IllegalAccessException e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. }
  32. mGallery.setOnItemClickListener(new OnItemClickListener() {
  33. public void onItemClick(AdapterView parent, View v, int position, long id) {
  34. testImageView.this.setTitle(String.valueOf(position));
  35. }
  36. });
  37. }
  38. /*
  39. * class ImageAdapter is used to control gallery source and operation.
  40. */
  41. private class ImageAdapter extends BaseAdapter{
  42. private Context mContext;
  43. private ArrayList<Integer> imgList=new ArrayList<Integer>();
  44. private ArrayList<Object> imgSizes=new ArrayList<Object>();
  45. public ImageAdapter(Context c) throws IllegalArgumentException, IllegalAccessException{
  46. mContext = c;
  47. //用反射机制来获取资源中的图片ID和尺寸
  48. Field[] fields = R.drawable.class.getDeclaredFields();
  49. for (Field field : fields)
  50. {
  51. if (!"icon".equals(field.getName()))//除了icon之外的图片
  52. {
  53. int index=field.getInt(R.drawable.class);
  54. //保存图片ID
  55. imgList.add(index);
  56. //保存图片大小
  57. int size[]=new int[2];
  58. Bitmap bmImg=BitmapFactory.decodeResource(getResources(),index);
  59. size[0]=bmImg.getWidth();size[1]=bmImg.getHeight();
  60. imgSizes.add(size);
  61. }
  62. }
  63. }
  64. @Override
  65. public int getCount() {
  66. // TODO Auto-generated method stub
  67. return imgList.size();
  68. }
  69. @Override
  70. public Object getItem(int position) {
  71. // TODO Auto-generated method stub
  72. return position;
  73. }
  74. @Override
  75. public long getItemId(int position) {
  76. // TODO Auto-generated method stub
  77. return position;
  78. }
  79. @Override
  80. public View getView(int position, View convertView, ViewGroup parent) {
  81. // TODO Auto-generated method stub
  82. ImageView i = new ImageView (mContext);
  83. //从imgList取得图片ID
  84. i.setImageResource(imgList.get(position).intValue());
  85. i.setScaleType(ImageView.ScaleType.FIT_XY);
  86. //从imgSizes取得图片大小
  87. int size[]= new int[2];
  88. size=(int[]) imgSizes.get(position);
  89. i.setLayoutParams(new Gallery.LayoutParams(size[0], size[1]));
  90. return i;
  91. }
  92. };
  93. }
时间: 2024-10-12 00:19:45

android Gallery的相关文章

ios 仿android gallery控件

ios 上没有发现与android gallery类似的控件,由于在项目上需要使用到.采用UICollectionView实现 ViewController.m #import "ViewController.h" #import "ImageCell.h" #import "LineLayout.h" @interface ViewController () <UICollectionViewDataSource, UICollectio

从零开始学android&lt;gallery拖拉组件.二十七.&gt;

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组件同

Android Gallery组件实现循环显示图像

Gallery组件主要用于横向显示图像列表,不过按常规做法.Gallery组件只能有限地显示指定的图像.也就是说,如果为Gallery组件指定了10张图像,那么当Gallery组件显示到第10张时,就不会再继续显示了.这虽然在大多数时候没有什么关系,但在某些情况下,我们希望图像显示到最后一张时再重第1张开始显示,也就是循环显示.要实现这种风格的Gallery组件,就需要对Gallery的Adapter对象进行一番改进. Gallery组件的传统用法 在实现可循环显示图像的Gallery组件之前先

Android Gallery和ImageSwitcher同步自动(滚动)播放图片库

本文主要内容是如何让Gallery和ImageSwitcher控件能够同步自动播放图片集 ,看起来较难,然而,实现的方法非常简单, 请跟我慢慢来.总的来说,本文要实现的效果如下图:(截图效果不怎么好) 本文是建立在以下两篇bolg上的:      1.Android入门第十二篇之Gallery                  2.Android 控件之ImageSwitcher图片切换器 如果对Gallery和ImageSwitcher控件不是很熟悉的同学,建议先过去看看,本文并没有怎么讲述控

android gallery 自定义边框+幻灯片

最近在项目中用到图片轮播,试了Gallery,ViewFlipper,ViewPager,感觉Gallery最符合需求,但是Gallery的系统边框很难看,项目中要求用自己的背景图片. 下面来看一下使用Gallery实现图片轮播 运行效果: 布局文件: [java] view plaincopy <FrameLayout > /> > /> /> /> </FrameLayout> 其中, android:fadingEdge="none&q

Android——Gallery 图片拖动效果

1.XML文件 <?xml version="1.0" encoding="utf-8"?><Gallery xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/gallery01"    android:layout_width="fill_parent"    android:la

android--可循环显示图像的Android Gallery组件

Gallery组件主要用于横向显示图像列表,不过按常规做法.Gallery组件只能有限地显示指定的图像.也就是说,如果为Gallery组件指定了10张图像,那么当Gallery组件显示到第10张时,就不会再继续显示了.这虽然在大多数时候没有什么关系,但在某些情况下,我们希望图像显示到最后一张时再重第1张开始显示,也就是循环显示.要实现这种风格的Gallery组件,就需要对Gallery的Adapter对象进行一番改进. Gallery组件的传统用法 <!--[endif]--> 在实现可循环显

Android Gallery图片双击放大倍数的算法

图片双击放大倍数和图片大小.显示图片的view大小,及图片当前的scale大小均有关系. 为了避免图片放大过大,设置了一个放大倍数的最大限制SCALE_LIMIT,目前该值为4. 具体算法如下所示: 图片的宽和高分别记为:imageW imageH 显示图片的view宽和高分别记为:viewW viewH 几个重要的比例记为: scale_1 = viewW / imageW; scale_2 = viewH / imageH; scale_3 = viewW / imageH; scale_4

Android自动测试之Monkey工具

Monkey工具 前言: 最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner.benchmark.其它test tool等等.因接触时间很短,很多地方有不足之处,希望能和大家多多交流. 一.  什么是Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应