本文来自肥宝传说之路,引用必须注明出处!

Gallery是Android查看图片的一个工具,用户使用非常方便。

可以通过左右滑动来查看不同的图片

代码比较简单,但是还是搞了一整天,因为碰到了一些问题。

主要是图片的来源问题,这里是通过Java的映射机制和R文件来获得drawable目录下的图片。

不过要注意,drawable类里面是有很多系统本身的属性,有些是不能显示出来的,所以要过滤,否则会报错。

另外放在drawable里面的图片,必须是png格式的。解决这两个问题就好办很多了。

activity_hello_world.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>  

HelloWorldActivity.java

package com.fable.helloworld;  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 HelloWorldActivity extends Activity {  private Gallery mGallery;  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_hello_world);  mGallery = (Gallery)findViewById(R.id.gallery);  try {  mGallery.setAdapter(new ImageAdapter(this)); //设置适配器,Android很多显示的东西都是弄成适配器放进去就行了} catch (IllegalArgumentException e) {//异常捕抓,Java有个异常机制,声明了throw就必须写代码去try-catch,c++好像没有e.printStackTrace();  } catch (IllegalAccessException e) {   e.printStackTrace();  }  mGallery.setOnItemClickListener(new OnItemClickListener() {  public void onItemClick(AdapterView parent, View v, int position, long id) {  HelloWorldActivity.this.setTitle(String.valueOf(position)); //点击的时候显示位置在标题处}  });  }  /* * 类ImageAdapter用来控制图片*/  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;  //通过系统本身的反射机制来获取图片资源。//这里获取的是drawable目录下的图片,//这个目录下,图片必须是png的,否则启动的时候回报错Field[] fields = R.drawable.class.getDeclaredFields(); //getDeclaredFields函数是Java本身的函数,获取类的属性for (Field field : fields)  {  if (field.getName().startsWith("fable"))//getName获取属性名,这里是规定以fable开头{     int index=field.getInt(R.drawable.class); //获取属性的值,整形的,这里可能会报错 //保存图片ID  imgList.add(index);  //保存图片大小  int size[]=new int[2];  Bitmap bmImg=BitmapFactory.decodeResource(getResources(),index);//通过id来获取图片对象  size[0]=bmImg.getWidth();//获取图片大小size[1]=bmImg.getHeight();  imgSizes.add(size);  }  }  }  @Override  public int getCount() {   //列表中的图片总数return imgList.size();  }  @Override  public Object getItem(int position) {   return position;  //}  @Override  public long getItemId(int position) {   return position;  }  @Override  public View getView(int position, View convertView, ViewGroup parent) {  ImageView i = new ImageView (mContext);  //从imgList取得图片ID  i.setImageResource(imgList.get(position).intValue());  //通过id获取图片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;  }  }
}

可能会有些人搞不定,可以下载代码,点击打开链接

转载于:https://www.cnblogs.com/fablegame/p/6430271.html

Android新手入门2016(15)--Gallery画廊相关推荐

  1. Android新手入门2016(1)--创建和运行helloworld

    本文来自肥宝传说之路,引用必须注明出处! 我是新手,但不是第一次接触了.陆陆续续做了一些东西,还写过一些小游戏.不过都是直接用cocos2d-x的多. 从现在起开始学习学习吧.不为什么,因为穷!!! ...

  2. Android新手入门2016(14)--FragmentTabHost实现选项卡和菜单

    本文来自肥宝传说之路,引用必须注明出处! 这章憋了好久.本来想写选项卡的,学到TabHost,TabWidget的,把代码拿过来准备研究的时候,发现竟然在4.0.3版本号被废弃了. 百度一下,发如今后 ...

  3. Android新手入门2016(6)--客户端编程思想的初步思考和Android学习路线

    本文来自肥宝传说之路,引用必须注明出处! 做了几年游戏服务端,不过也不是没接触过客户端的.毕业前的作业就不说了,刚毕业的时候,是在亿迅公司做CRM,开发广东电信内部使用的系统.每个功能从头到尾自己搞. ...

  4. Android新手入门2016(10)--GridView

    本文来自肥宝传说之路,引用必须注明出处! GridView跟ListView一样是多控件布局.实现九宫图是最方便的. 还是先看看图,没图说个鸡鸡是不是 如上图,是一种应用方式,在每个格子里面,放入应用 ...

  5. Android新手入门,怎样才是正确的学习方式

    对于android新手入门,遇到的学习瓶颈和困难是无限大的,新手入门,没有一个好学的学习方向,没有一个学习规划,更多的则是在百度上搜索,查阅相关资料,如果没有辅导,纯粹就是瞎摸索.百度上面搜索资料,更 ...

  6. Android新手入门思维导图

    本文来自AndroidDeveloper的公众号,您可以搜索公众号:googdev,来获取AndroidDeveloper的技术干货. ----/------– 正文 ----/------– 如何快 ...

  7. Android新手之旅(15) Win7下配置遇到的问题

    系统重做,由XP变为win7,文件都在,只需要做这几项工作: 配置系统的环境变量 配置project-android sdk的路径 安装jdk 但是,把原来的系统导入后,老是报错,都是@overrid ...

  8. Android Gallery画廊 兼容4.0以上版本

    最近在做Gallery画廊效果时,搜索大量资料,发现很多博主都是2012年写的文章.对于现在的sdk版本,发现拿过来都没有用,效果变形: 非常遗憾,中间的图变形了,或者说没有把转角恢复. 查阅了大量资 ...

  9. Android开发学习之基于ViewPager实现Gallery画廊效果

    通过我们前面的学习,我们知道ViewPager是可以做出近乎完美的滑动体验,回顾整个Android,我们发现Gallery具备同样的特点,于是我们大胆地猜想,Gallery是否和ViewPager之间 ...

最新文章

  1. CTR模型越来越深,如何让它变轻?
  2. linux里的网卡自动连接,【Raspberry Pi】USB无线网卡自动连接
  3. 【总结】Oracle sql 中的字符(串)替换与转换
  4. Andrew Ng机器学习公开课笔记 -- Generative Learning algorithms
  5. 解决通达OA2017版本手机端选择不到2021年的问题,手机端只能选择到2020年
  6. 【验证码识别】OpenCV挑战极验滑动拼图验证码
  7. opencv android模版匹配,基于opencv模板匹配的目标检测方法
  8. php做购物商品库存解决方法
  9. windows下超越dirx的opencv视频转化库
  10. Android使用Bugly实现静默安装/自动安装app
  11. 读取网络时间完整代码
  12. Audacity合成音频的软件
  13. 美国互联网影视的盈利模式 —— Netflix模式
  14. JSON解析基础使用知识-Java
  15. 合成孔径雷达成像算法与实现(信号处理基础知识点)
  16. 基于云开发的微信小程序-miNi相册(主页与上传图片功能)
  17. 使用vmware worksttion的ovftool工具导出esxi虚拟机的ovf模板
  18. 我终于知道了M键和右Shift之间的逗号、句号、斜杠是C#的Keys的哪个了。
  19. 浅谈如何界定核心期刊、一级期刊、优秀期刊及其它
  20. Android 9.0 SIM卡初始化流程

热门文章

  1. php向指定文件发送消息,PHP-将文件发送给用户
  2. 连接svn认证失败有那些原因_windows局域网搭建svn服务器
  3. 量子物理 詹班 计算机,6量子物理作业答案
  4. vs2019键盘钩子_C#键盘按键监视
  5. 051_Unicode字符官方标准二
  6. mysql 同一张表 某个字段更新到另一条数据上_面试基础:数据库MySQL基础入门(下)...
  7. java 微网站_java架构之路-(微服务专题)初步认识微服务与nacos初步搭建
  8. php httprequest 安装,php httpRequest(php实现httpRequest)
  9. java 读取webservice_java 调用webService的各种方法
  10. 导向滤波python_导向滤波(Guided Filter)简要介绍