GridView: A view that shows items in two-dimensional scrolling grid. The items in the grid come from the ListAdapter associated with this view. 简单说,GridView就是我们资源管理器平常见到的一个个文件的icon显示方式。
上面提及到了,GridView的Item是来自ListAdapter的,所以一般在Activity的onCreate使用GridView的代码:
  1. @Override
  2. public void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.grid_2);
  5. GridView g = (GridView) findViewById(R.id.myGrid);
  6. g.setAdapter(new ImageAdapter(this));
  7. }
而ImageAdapter一般是extends BaseAdapter。BaseAdapter是implements ListAdapter SpinnerAdapter,但很多时候自定义的Adapter都是override ListAdapter的父类Adapter接口里面的方法:
int     getCount()                   获取当前Adapter的Items数目
Object getItem(int position)     获取相应position的Item
long     getItemId(int position)  获取相应position的Item在List中的row id
View    getView(int position, View convertView, ViewGroup parent) 获取在指定position所要显示的data的View
这些方法函数和swing的差不多,都是基于MVC。大概原理过程是这样的:程序需要显示GridView,那么要把data一个一个地显示出来是通过 一个for循环,首先call Adapter.getCount()得到有多少个data,然后position++地getItem,getView得到要显示的view,这样子逐 一地显示出来!
下面是官方sample里面的Photo Grid的例子,本人省略了某些代码:
  1. public class ImageAdapter extends BaseAdapter {
  2. public ImageAdapter(Context c) {
  3. mContext = c;
  4. }
  5. public int getCount() {
  6. return mThumbIds.length;
  7. }
  8. public Object getItem(int position) {
  9. return position;
  10. }
  11. public long getItemId(int position) {
  12. return position;
  13. }
  14. public View getView(int position, View convertView, ViewGroup parent) {
  15. ImageView imageView;
  16. if (convertView == null) {
  17. imageView = new ImageView(mContext);
  18. imageView.setLayoutParams(new GridView.LayoutParams(45, 45));//设置ImageView宽高
  19. imageView.setAdjustViewBounds(false);
  20. imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
  21. imageView.setPadding(8, 8, 8, 8);
  22. } else {
  23. imageView = (ImageView) convertView;
  24. }
  25. imageView.setImageResource(mThumbIds[position]);
  26. return imageView;
  27. }
  28. private Context mContext;
  29. private Integer[] mThumbIds = {
  30. R.drawable.sample_thumb_0, R.drawable.sample_thumb_1,
  31. R.drawable.sample_thumb_2, R.drawable.sample_thumb_3,
  32. R.drawable.sample_thumb_4, R.drawable.sample_thumb_5,
  33. R.drawable.sample_thumb_6, R.drawable.sample_thumb_7
  34. };
  35. }
留意getView里面的代码,要判断convertView是否为null,以便重用,减少对象的创建,减少内存占用。
XML布局文件内容,原来就只是指明GridView:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <GridView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/myGrid"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:padding="10dp"
  7. android:verticalSpacing="10dp"
  8. android:horizontalSpacing="10dp"
  9. android:numColumns="auto_fit"
  10. android:columnWidth="60dp"
  11. android:stretchMode="columnWidth"
  12. android:gravity="center"
  13. />
可以看到getView,和ImageView是重点,影响图片的显示效果。而且发现列数是不确定的,取决于每个ImageView的宽度和屏幕的宽度。接下来看看ImageView。
ImageView:Displays an arbitrary image, such as an icon. The ImageView class can load images from various sources (such as resources or content providers), takes care of computing its measurement from the image so that it can be used in any layout manager, and provides various display options such as scaling and tinting。 ImageView就是用来显示Image,icon的。
这里我们重点理解ImageView的属性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType)。android:scaleType是控制图片如何 resized/moved来匹对ImageView的size。ImageView.ScaleType / android:scaleType值的意义区别:
CENTER /center  按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
CENTER_CROP / centerCrop  按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
CENTER_INSIDE / centerInside  将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
FIT_CENTER / fitCenter  把图片按比例扩大/缩小到View的宽度,居中显示
FIT_END / fitEnd   把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
FIT_START / fitStart  把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
FIT_XY / fitXY  把图片不按比例扩大/缩小到View的大小显示
MATRIX / matrix 用矩阵来绘制
一开始我不明白MATRIX矩阵,网上搜索后发现原来MATRIX矩阵可以动态缩小放大图片来显示,这里不展开深入的了解,只是贴出相关语句,缩小图片:
  1. //获得Bitmap的高和宽
  2. int bmpWidth=bmp.getWidth();
  3. int bmpHeight=bmp.getHeight();
  4. //设置缩小比例
  5. double scale=0.8;
  6. //计算出这次要缩小的比例
  7. scaleWidth=(float)(scaleWidth*scale);
  8. scaleHeight=(float)(scaleHeight*scale);
  9. //产生resize后的Bitmap对象
  10. Matrix matrix=new Matrix();
  11. matrix.postScale(scaleWidth, scaleHeight);
  12. Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);
应用ImageView的例子很多,看看上次FrameLayout里面的:
  1. <ImageView
  2. android:id="@+id/image"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:scaleType="center"
  6. android:src="@drawable/candle"
  7. />
** 要注意一点,我发现Drawable文件夹里面的图片命名是不能大写的。



转载于:https://www.cnblogs.com/zhy927/archive/2011/04/07/anroid.html

Android UI学习 - GridView和ImageView的使用相关推荐

  1. 【android UI学习】LinearGradient实现歌词滚动

    Shader着色器的讲解,可以参考 [android UI学习]Shader着色器 这里LinearGradient的实际运用 先看运行效果 具体思路就是, 用LinearGradient设置一个三个 ...

  2. android UI学习书籍

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:扯淡兄 链接:http://www.zhihu.com/question/19579609/answer/21561103 ...

  3. Android UI学习组件概述

    Android的UI组件繁多,如果学习的时候不能自己总结和分类而是学一个记一个不去思考和学习他们内在的联系那真的是只有做Farmer的命了.为了向注定成为Farmer的命运抗争,在学习Android的 ...

  4. android layout组件,Android UI学习 - Linear Layout, RelativeLayout

    1.一些常用的公共属性介绍 1) layout_width -宽 fill_parent: 宽度和父元素相同,wrap_content: 宽度随本身的内容所调整,或者指定 px值来设置宽 2) lay ...

  5. Android UI学习 - Linear Layout, RelativeLayout

    1. 一些常用的公共属性介绍 1) layout_width - 宽 fill_parent: 宽度和父元素相同,wrap_content: 宽度随本身的内容所调整,或者指定 px 值来设置宽 2) ...

  6. android tabhost --android UI 学习

    2019独角兽企业重金招聘Python工程师标准>>> 实现TabHost有三种方式:继承自TabActivity,ActivityGroup和自定义的Activity 实现效果图: ...

  7. android开发UI界面布局教学,android UI学习 -- 设置界面的布局(包括style的使用,selector的使用,Checkbox自定义样式,菜单项的样式)...

    最终实现效果如下图: 具体来说就是实现了checkbox自定义选中和为选择样式,菜单项根据不同位置设置不同背景. 先上整体布局文件代码: xmlns:tools="http://schema ...

  8. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)---探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  9. Android开发学习笔记:Gallery和GridView浅析

    一.Gallery的简介 Gallery(画廊)是一个锁定中心条目并且拥有水平滚动列表的视图,一般用来浏览图片,并且可以响应事件显示信息.Gallery还可以和ImageSwitcher组件结合使用来 ...

最新文章

  1. 从零开始学 Python 之字符串
  2. 开发日记-20190329
  3. 1365. How Many Numbers Are Smaller Than the Current Number 有多少小于当前数字的数字
  4. hasOwnProperty
  5. Hazelcast发布Jet 0.6版本
  6. jquery ajax php中 css样式不显示,Chrome浏览器在Ajax同步调用之前不会显示Jquery的动态css Propery更改...
  7. MacFetionV0.8.0测试版
  8. Mr.J-- jQuery学习笔记(三十)--属性操作方法(添加删除)
  9. 企业如何考虑自己的网络防护设备
  10. Linux内核中的同步原语:自旋锁,信号量,互斥锁,读写信号量,顺序锁
  11. android system.out.println,为什么“System.out.println”在Android中不起作用?
  12. android studio按键精灵,51模拟器怎么连接按键精灵 51安卓模拟器按键精灵连接教程...
  13. NDK在Linux下载配置以及C、C++编译配置(交叉编译)
  14. 黑马程序员python入门学习笔记
  15. 小米路由器显示无法连接服务器错误代码,小米路由器:路由器无法上网怎么办...
  16. 大数据要学javaweb吗_纠结!Java和大数据学哪个更好?
  17. linux网络协议栈(四)链路层 (5)vlan处理
  18. 每一个数据分析师都要掌握的方法:多维度分析法
  19. 苹果xr黑屏转圈圈解决方法_苹果iPhone XR升级iOS 12.3后黑屏转圈圈怎么办?附解决办法...
  20. 七夕第一波狗粮来啦!魏晨晒婚纱照,与妻子爱情长跑十年成眷属

热门文章

  1. MySQL触发器介绍
  2. 并发编程面试题(2021最新版)
  3. 一次处理ORA-06512的经验
  4. oracle dump 转储
  5. 巨蟒python全栈开发flask11项目开始3
  6. 联合索引使用规则(转载)
  7. vue脚手架中使用axios
  8. django-celery使用
  9. 解决Windows 8系统假死的方法
  10. html5纪念日期代码,HTML5适合的情人节礼物有纪念日期功能