ImageView家族的继承关系如图:

ImageView继承自View组件,它的主要功能室显示图片,还可以显示Drawable对象。

ImageView直接子类是ImageButton,QuickContactBadge,间接子类是ZoomButton,因此ImageView 的所有XML属性,方法,基本上都可以用于ImageButton,ZoomButton

ImageView的XML 属性如下:

android:adjustViewBounds:是否调整自己的边界来保持所显示的图片长宽比。需要与maxWidth、MaxHeight一起使用,否则单独使用没有效果。

android:cropToPadding:true,该组件将会被裁剪到保留该ImageView的padding

android:MaxHeight,android:maxWidth:设置View的最大高度和宽度,单独使用无效,需要与setAdjustViewBounds一起使用。如果想设置图片固定大小,又想保持图片宽高比,需要如下设置:
1) 设置setAdjustViewBounds为true;
2) 设置maxWidth、MaxHeight;
3) 设置设置layout_width和layout_height为wrap_content。

android:tint:将图片渲染成指定的颜色

android:src:设置ImageView所显示的Drawable对象的ID

android:scaleType:setScaleType(ImageView.ScaleType),ImageView.ScaleType是内部类,设置图片如何缩放或移动一适应ImageView的大小,常值如下:

matrix(ImageView.ScaleType.MATRIC):使用matric矩阵来绘图进行缩放

fitXY(ImageView.ScaleType.FIT_XY):对图片横向,纵向独立缩放,使得图片完全适应于该ImageView,图片横纵比可能会改变

fitStart(ImageView.ScaleType.FIT_START):保持横纵比缩放图片,直到较长的边与ImageView的边长相等,完成后放在ImageView的左上角

fitEnd(ImageView.ScaleType.FIT_END):保持横纵比缩放图片,直到较长的边与ImageView的边长相等,完成后放在ImageView的右下角。

fitCenter(ImageView.ScaleType.FIT_CENTER):保持横纵比缩放图片,直到较长的边与ImageView的边长相等,完成后放在ImageView的中央。

center(ImageView.ScaleType.CENTER):图片放在ImageVIew中间,不进行任何缩放

centerInside(ImageView.ScaleType.CENTER_INSIDE):保持横纵比缩放图片,使得ImageView能完全显示该图片

centerCrop(ImageView.ScaleType.CENTER_CROP):保持横纵比,使得图片能完全覆盖ImageView。只要图片最短边能显示出来即可。

ImageView设置图片资源的方法有很多,如下:Bitmap,Drawable,Resource

setImageBitmap(Bitmap btm);使用Bitmap位图设置该ImageView显示的图片

setImageDrawable(Drawable drawable);使用Drawable 对象设置该ImageView显示的图片,这里的Drawable 对象是Resource对象获得的实际资源,不是资源ID

setImageResource(int reId);使用图片资源ID设置该ImageView显示的图片

例,图片浏览器,设置图片透明度。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/root"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" android:orientation="horizontal">"<Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button1" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button2" /><Buttonandroid:id="@+id/button3"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/next" /></LinearLayout>
<!-- 定义一个ImageView显示图片 --><ImageViewandroid:id="@+id/imageView1"android:layout_width="match_parent"android:layout_height="280dp"android:scaleType="fitCenter"android:src="@drawable/shuangta" /><ImageViewandroid:id="@+id/imageView2"android:layout_width="120dp"android:layout_height="120dp"android:src="@drawable/ic_launcher" /></LinearLayout>
package com.hust.imageviewtest;import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;public class MainActivity extends Activity {// 定义一个访问图片的数组int[] images = new int[]{R.drawable.lijiang,R.drawable.qiao,R.drawable.shuangta,R.drawable.shui,R.drawable.xiangbi,};// 定义默认显示的图片int currentImg = 2;// 定义图片的初始透明度private int alpha = 255;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final Button plus = (Button) findViewById(R.id.button1);final Button minus = (Button) findViewById(R.id.button2);final Button next = (Button) findViewById(R.id.button3);final ImageView image1 = (ImageView) findViewById(R.id.imageView1);final ImageView image2 = (ImageView) findViewById(R.id.imageView2);// 定义查看下一张图片的监听器next.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// 控制ImageView显示下一张图片image1.setImageResource(images[++currentImg % images.length]);}});// 定义改变图片透明度的方法OnClickListener listener = new OnClickListener(){@Overridepublic void onClick(View v){if (v == plus){alpha += 20;}if (v == minus){alpha -= 20;}if (alpha >= 255){alpha = 255;}if (alpha <= 0){alpha = 0;}// 改变图片的透明度image1.setAlpha(alpha);}};// 为两个按钮添加监听器plus.setOnClickListener(listener);minus.setOnClickListener(listener);image1.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View view, MotionEvent event){BitmapDrawable bitmapDrawable = (BitmapDrawable) image1.getDrawable();// 获取第一个图片显示框中的位图Bitmap bitmap = bitmapDrawable.getBitmap();// bitmap图片实际大小与第一个ImageView的缩放比例double scale = bitmap.getWidth() / 320.0;// 获取需要显示的图片的开始点int x = (int) (event.getX() * scale);int y = (int) (event.getY() * scale);if (x + 120 > bitmap.getWidth()){x = bitmap.getWidth() - 120;}if (y + 120 > bitmap.getHeight()){y = bitmap.getHeight() - 120;}// 显示图片的指定区域image2.setImageBitmap(Bitmap.createBitmap(bitmap, x, y, 120, 120));image2.setAlpha(alpha);return false;}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}

UI组件之ImageView及其子类(一)ImageView显示图片相关推荐

  1. UI组件之AdapterView及其子类(四)Gallery画廊控件使用

    听说 Gallery现在已经不使用了,API使用ViewPaper代替了,以后再学专研ViewPaper吧现在说说Gallery画廊,就是不停显示图片的意思 Gallery是用来水平滚动的显示一系列项 ...

  2. UI组件之AdapterView及其子类(二)GridView网格视图的使用

    GridView网格视图属性: android:numColumns="auto_fit" --------列数设置为自动,可以为确定的数值 android:columnWidth ...

  3. UI组件之TextView及其子类(二)RadioButton和CheckBox

    单选按钮(RadioButton)和复选框(CheckBox),状态开关按钮(ToggleButton),开关(Switch)都是普通的UI组件,都继承了Button类,因此都可以用Button的各种 ...

  4. UI组件之AdapterView及其子类(六)ExpandableListView组件和ExpandableListActivity的使用

    ExpandableListView是ListView的子类,他在ListView上进行了扩展,它把列表项分成了几组,每组里包含了多个列表项 ExpandableListView的列表项是由Expan ...

  5. UI组件之AdapterView及其子类(一)三种Adapter适配器填充ListView

    AdapterView的内容一般是包含多项相同格式资源的列表,常用的有5种AdapterView的子类: (1)ListView:简单的列表 (2)Spinner:下拉列表,给用户提供选择 (3)Ga ...

  6. UI组件之AdapterView及其子类(三)Spinner控件详解

    Spinner提供了从一个数据集合中快速选择一项值的办法.默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单或者一个dialog对话框,从该 ...

  7. UI组件之ProgressBar及其子类(二)SeekBar拖动条和RatingBar星级评分条的使用

    拖动条采用拖动滑块的位置来表示数值 SeekBar的常用xml属性值: 重要的android:thumb制定一个Drawable对象,改变滑块外观 通过滑块来改变图片的透明度: main.xml &l ...

  8. UI组件之AdapterView及其子类(五)ListView组件和ListActivity

    ListView组件是一个显示组件,继承AdapterView基类,前面已经介绍了分别使用ArrayAdapter,SimpleAdapter,扩展BaseAdapter来为LisView提供列表项h ...

  9. UI组件之AdapterView及其子类关系,Adapter接口及其实现类关系

    AdapterView本身是一个抽象基类,它派生的的子类在用法上十分相似.AdapterView直接派生的三个子类:AbsListView,AbsSpinner,AdapterViewAnimator ...

  10. UI组件之 ProgressBar及其子类(一)ProgressBar进度条的使用

    ProgressBar本身进度条组件,它派生了:SeekBar和RatingBar两个组件,他们的继承关系如下: 1.ProgressBar有两个进度,一个是android:progress,另一个是 ...

最新文章

  1. VB.NET怎样开发自定义Windows控件
  2. C# 离线人脸识别 ArcSoft
  3. [react] 请说说什么是useState?为什么要使用useState?
  4. CSS基础----元素分类
  5. StringBuffer跟StringBuilder以及HashMap跟HashTable
  6. go lang go get There is no tracking information for the current branch.Please specify which
  7. 杭州云栖大会10月起航,这里有一份最全的大会剧透
  8. Linux signal 那些事儿 (3)
  9. Atitit tomcat 启动报错 ZipException: archive is not a ZIP archive. 1.1. ----Should sh lib jar err... 1
  10. 【ETWVRP】基于matlab遗传算法求解带时间窗的含充电站车辆路径规划问题【含Matlab源码 1221期】
  11. 《2021爱分析·中国RPA应用趋势报告》正式发布
  12. mongodb下载安装和基本操作
  13. Android N DisplayManager服务解析(二)
  14. 马斯克回应福特CEO喊话:我已经有一辆Cybertruck了
  15. 游戏技巧-《文明6》的C盘爆满问题
  16. 关于网线连内网,无线连外网,内外网同时连通的方法探究
  17. 集线器、交换机、路由器之间的关系(清晰明了)
  18. malic-2021年寒假热身-05 D - 楼高莫近危阑倚(DFS+树状数组)
  19. 武训离开人间已经整整一百一十五年了
  20. 个人如何炒外汇 如何进行外汇交易

热门文章

  1. c++新特性11 (10)shared_ptr一”概述“
  2. 区块链BaaS云服务(36)欧盟EBSI 区块链
  3. 跨链(5)“蚂蚁区块链”之预言机
  4. 2022年美国大学生数学建模竞赛各题型常见参考代码汇总
  5. 【Opencv实战】趣味应用 | 用OpenCV自动给图片添加虚拟特效---平淡的生活需要技术的点缀~
  6. Linux Kernel中spinlock的设计与实现
  7. Android 下 APK 捆绑器的实现
  8. (11)调用门提权(有参)
  9. 2020-11-5(安卓)
  10. 【攻防】Kubelet访问控制机制与提权方法研究