Android UI学习 - GridView和ImageView的使用

简介:
    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.  
  5.     setContentView(R.layout.grid_2); 
  6.  
  7.     GridView g = (GridView) findViewById(R.id.myGrid); 
  8.     g.setAdapter(new ImageAdapter(this)); 
     而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++地getItemgetView得到要显示的view,这样子逐一地显示出来
 
下面是官方sample里面的Photo Grid的例子本人省略了某些代码
 
  1. public class ImageAdapter extends BaseAdapter { 
  2.     public ImageAdapter(Context c) { 
  3.         mContext = c; 
  4.     } 
  5.  
  6.     public int getCount() { 
  7.         return mThumbIds.length; 
  8.     } 
  9.  
  10.     public Object getItem(int position) { 
  11.         return position; 
  12.     } 
  13.  
  14.     public long getItemId(int position) { 
  15.         return position; 
  16.     } 
  17.  
  18.     public View getView(int position, View convertView, ViewGroup parent) { 
  19.         ImageView imageView; 
  20.         if (convertView == null) { 
  21.             imageView = new ImageView(mContext); 
  22.             imageView.setLayoutParams(new GridView.LayoutParams(4545));//设置ImageView宽高 
  23.             imageView.setAdjustViewBounds(false); 
  24.             imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
  25.             imageView.setPadding(8888); 
  26.         } else { 
  27.             imageView = (ImageView) convertView; 
  28.         } 
  29.  
  30.         imageView.setImageResource(mThumbIds[position]); 
  31.  
  32.         return imageView; 
  33.     } 
  34.  
  35.     private Context mContext; 
  36.  
  37.     private Integer[] mThumbIds = { 
  38.             R.drawable.sample_thumb_0, R.drawable.sample_thumb_1, 
  39.             R.drawable.sample_thumb_2, R.drawable.sample_thumb_3, 
  40.             R.drawable.sample_thumb_4, R.drawable.sample_thumb_5, 
  41.             R.drawable.sample_thumb_6, R.drawable.sample_thumb_7
  42.     }; 
留意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.      
  9.     android:horizontalSpacing="10dp" 
  10.     android:numColumns="auto_fit" 
  11.     android:columnWidth="60dp" 
  12.     android:stretchMode="columnWidth" 
  13.      
  14.     android:gravity="center" 
  15.     /> 
    可以看到getView和ImageView是重点影响图片的显示效果。而且发现列数是不确定的取决于每个ImageView的宽度和屏幕的宽度。接下来看看ImageView。
 
     ImageViewDisplays 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就是用来显示Imageicon的。
    这里我们重点理解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. //设置缩小比例 
  6. double scale=0.8
  7. //计算出这次要缩小的比例 
  8. scaleWidth=(float)(scaleWidth*scale); 
  9. scaleHeight=(float)(scaleHeight*scale); 
  10.  
  11. //产生resize后的Bitmap对象 
  12. Matrix matrix=new Matrix(); 
  13. matrix.postScale(scaleWidth, scaleHeight); 
  14. Bitmap resizeBmp=Bitmap.createBitmap(bmp, 00, 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文件夹里面的图片命名是不能大写的。

 


本文转自 Icansoft 51CTO博客原文链接 http://blog.51cto.com/android/316255

相关文章
|
6月前
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
384 4
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
281 7
第一个安卓项目 | 中国象棋demo学习
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
404 2
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
454 1
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
468 1
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
1812 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?

热门文章

最新文章