ImageView及其子类
ImageView及其子类
(1)ImageView继承自View组件,任何Drawable对象都可以用ImageView来显示,ImageView派生出来了ImageButton、ZoomButton等组件。
(2)ImageView支持的xml属性
android:adjustViewBounds ------->设置ImageView是否调整自己的边界来保持所显示图片的长宽比
android:cropToPadding -------->如果该属性设为true,该组件将会被裁剪到保留该ImageView的padding
android:maxHeight -------->设置ImageView的最大高度
android:maxWidth -------->设置ImageView的最大宽度
android:scaleType -------->设置所显示的图片是如何缩放或移动以适应ImageView的大小
android:src -------->设置ImageView所显示的Drawable对象的ID
---------------------》android:scaleType属性的设定值有:
matriX:使用matriX方式进行缩放
fitXY:对图片横向、纵向独立缩放,使得该图片完全适应该ImageView,图片的纵横比可能会改变
fitStart:保持纵横比缩放图片,直到图片能完全显示在ImageView中(图片较长的边长与ImageView相应的边长想等),缩放后将图片放在ImageView的左上角
fitCenter:保持纵横比缩放图片,直到图片能完全显示在ImageView中(图片较长的边长与ImageView相应的边长想等),缩放后将图片放在ImageView的中央
fitEnd:保持纵横比缩放图片,直到图片能完全显示在ImageView中(图片较长的边长与ImageView相应的边长想等),缩放后将图片放在ImageView的右下角
center:将图片放在ImageView的中间,不进行任何的缩放
centerCrop:保持纵横比来缩放图片,使得图片能完全覆盖ImageView,只要图片最短的边能显示出来即可
centerInside:保持纵横比来缩放图片,使得图片能完全显示在ImageView中
------实例一:图片浏览器
(1)main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/test"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"> <!-- 增大透明度 -->
<Button
android:id="@+id/high"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="增大透明度"/>
<!-- 降低透明度 -->
<Button
android:id="@+id/low"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="降低透明度"/>
<!--下一张 -->
<Button
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下一张"/>
</LinearLayout> <!-- 定义显示整体图片的ImageView -->
<!-- android:scaleType="fitCenter"
图片保持纵横比缩放,直到图片能完全显示imageview中,最后将图片放在imageview的中间 -->
<ImageView
android:id="@+id/image1"
android:layout_width="fill_parent"
android:layout_height="240dp"
android:src="@drawable/dw1"
android:scaleType="fitCenter"
/> <!-- 定义显示局部图片的ImageView -->
<ImageView
android:id="@+id/image2"
android:layout_width="120dp"
android:layout_height="120dp"
android:background="#00f"
android:layout_marginTop="10dp"
/> </LinearLayout>
(2)MainActivity.java文件
package com.yby.imageview; import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
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;
/**
* ImageView及其子类
* @author yby
*
*/
public class MainActivity extends Activity{ /**
* 实例:图片浏览器
* (1)可以通过增大透明度和降低透明度来查看图片的透明度
* (2)通过点击大图片上面的一个点,将点击触发点周围的图片截取出来显示在一个小区域中,可以查看图片的局部细节
*/
//定义一个图片数组
private int[] images = new int[]{
R.drawable.dw1,
R.drawable.dw2,
R.drawable.dw3,
R.drawable.dw4,
R.drawable.dw5,
R.drawable.dw6
};
//定义默认显示的图片
int currentImg = 2;
//定义图片的初始透明度
private int alpha = 255;
private Button high,low,next;
private ImageView image1,image2; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
high = (Button) findViewById(R.id.high);
low = (Button) findViewById(R.id.low);
next = (Button) findViewById(R.id.next);
image1 = (ImageView) findViewById(R.id.image1);
image2 = (ImageView) findViewById(R.id.image2);
//为点击next添加监听事件
next.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
//控制imageview显示下一张图片
image1.setImageResource(images[++currentImg%images.length]);
}
}); //定义改变图片透明度的方法
OnClickListener listener = new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v == high){
alpha +=20;
}
if(v == low){
alpha -=20;
}
if(alpha >= 255){
alpha = 255;
}
if(alpha <= 0){
alpha = 0;
}
//改变图片的透明度
image1.setAlpha(alpha);
}
};
//为两个按钮添加监听器
high.setOnClickListener(listener);
low.setOnClickListener(listener); //从第一张图片的触碰点开始截取,并将截取后的图片显示在第二个imageview中
image1.setOnTouchListener(new OnTouchListener() { @Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
BitmapDrawable bd = (BitmapDrawable) image1.getDrawable();
//获取第一个图片显示框的位图
Bitmap bitmap = bd.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;
}
});
}
}
(3)效果图

ImageButton按钮和QuickContactBadge关联联系人
(1)ImageView派生出了两个子类:ImageButton图片按钮,QuickContactBadge关联联系人
(2)Button和ImageButton的区别:Button生成的按钮上显示的是文字,而ImageButton上显示的是图片,所以为ImageButton指定text属性没有作用,不会显示出来文字
(3)ImageButton派生出来了一个ZoomButton,ZoomButton可以代表放大、缩小两个按钮,android默认提供了btn_minus/btn_plus两个Drawable资源,只要为ZoomButton的src属性分别指定btn_minus/btn_plus,即可实现放大和缩小按钮。(实际上android还提供了ZoomControls组件,该组件相当于同时组合了放大和缩小的按钮,并允许分别为两个按钮绑定不同的监听器事件)
(4)QuickContactBadge可以通过android:src来指定显示的图片,该图片可以关联到手机中的联系人,当用户点击该图片时,系统会打开相应的联系人信息页面,如果没有该联系人,则会先提示是否要创建一个该联系人
---------实例二:ImageButton按钮和QuickContactBadge关联联系人
(1)zoombutton.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <!-- 普通图片按钮 -->
<ImageButton
android:layout_width="120dp"
android:layout_height="120dp"
android:scaleType="fitCenter"
android:src="@drawable/switcher"
/>
<!-- 按下时显示不同的图片 -->
<ImageButton
android:layout_width="120dp"
android:layout_height="120dp"
android:scaleType="fitCenter"
android:src="@drawable/btn_selector"
/> <LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10sp"
android:layout_gravity="center_horizontal"> <!-- 定义两个ZoomButton,分别为btn_plus和btn_minus -->
<ZoomButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_plus"/> <ZoomButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:src="@drawable/btn_minus"/> </LinearLayout> <!-- 定义一个ZoomControls组件 -->
<ZoomControls
android:id="@+id/zoomcontrols"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/> <LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<!-- QuickContactBadge可以关联联系人 -->
<QuickContactBadge
android:id="@+id/badge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我的偶像"
android:layout_gravity="center_vertical"
android:textSize="16sp"
/> </LinearLayout> </LinearLayout>
(2)ZoomButtonActivity.java文件
package com.yby.imageview; import android.app.Activity;
import android.os.Bundle;
import android.widget.QuickContactBadge;
/**
*
* @author yinbenyang
*
*/
public class ZoomButtonActivity extends Activity{ private QuickContactBadge qcb; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.zoombutton);
//获取QuickContactBadge组件
qcb = (QuickContactBadge) findViewById(R.id.badge);
//将QuickContactBadge组件与特定的电话号码对应的联系人建立关联
qcb.assignContactFromPhone("15901507777", false);
//将QuickContactBadge组件与指定email地址的联系人建立关联
// qcb.assignContactFromEmail("", false);
//将QuickContactBadge组件与特定Uri地址的联系人建立关联
// qcb.assignContactUri(Uri.parse("XXXXXXXX"));
}
}
(3)btn_selector.xml文件【图片按下与松开时分别显示不同的图片】
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 指定按钮按下时的图片 -->
<item android:drawable="@drawable/switcher" android:state_pressed="true"></item>
<!-- 指定按钮松开时的图片 -->
<item android:drawable="@drawable/wifi" android:state_pressed="false"></item>
</selector>
(4)效果图:


ImageView及其子类的更多相关文章
- Android用户界面 UI组件--ImageView及其子类ImageButton,QuickContactBadge附带Draw9Patch工具说明
1.ImageView 常用属性: android:src 设置可绘制对象作为 ImageView 显示的内容 android:cropToPadding 如果设置为true,图片裁剪到保留该Imag ...
- ImageView的子类无法加载图片
在图片预览时,偶现图片无法现实,在查看程序的时候发现Bitmap是实际存在的,但是在ImageView中缺绘制不出来,这个问题困然了我很久,查看代码也查不出原因,再加上是偶现的,查原因时费了不少时间. ...
- ImageView及其子类(三)
实例:使用QuickContactBadge关联联系人 QuickContactBadge继承了ImageView,因此它的本质也是图片,也可以通过android:src属性指定他显示的图片 ...
- ImageView及其子类(一)
ImageView继承自View组件,它的主要功能是用于显示图片——实际上这个书法不太严谨因为他能显示的不仅是图片,任何Drawable对象都可以使用ImageView来显示.除此之外,ImageVi ...
- ImageView及其子类(二)
实例:强大的图片按钮 下面的实例定义了多个图片按钮,并定义了两个ZoomButton.两个ZoomButton的android:src属性分别指定为@android:drawable/btn_minu ...
- Android应用系列:完美运行GIF格式的ImageView(附源码)
前言 我们都知道ImageView是不能完美加载Gif格式的图片,如果我们在ImageView中src指定的资源是gif格式的话,我们将会惊喜的发觉画面永远停留在第一帧,也就是不会有动画效果.当然,经 ...
- Android零基础入门第22节:ImageView的属性和方法大全
原文:Android零基础入门第22节:ImageView的属性和方法大全 通过前面几期的学习,TextView控件及其子控件基本学习完成,可以在Android屏幕上显示一些文字或者按钮,那么从本期开 ...
- Android 中常见控件的介绍和使用
1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...
- 【转】GitHub 排名前 100 的安卓、iOS项目简介
GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...
随机推荐
- .NET 代码编译过程
作为一种代码指令平台,Microsoft .NET比微软公司先前推出的其他技术平台要来得更为复杂.由于.NET提供了对多种编程语言以及(在理论上说)多重平台的支持,这就需要在传统的两个代 码层添加一个 ...
- 对dataTable去重
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.T ...
- TCP/IP各层主要功能
第一层:网路接口层(物理层和链路层) 提供TCP/IP协议的数据结构和实际物理硬件之间的接口.物理层的任务就是为它的上一层提供一个物理连接, 以及它们的机械.电气.功能和过程特性.链路层的主要功能是如 ...
- 发布常见问题(C#)
1.Sys.WebForms.PageRequestManagerServerErrorException: 在服务器上处理请求时出现未知错误.服务器返回的状态码为: 500 可能的原因: asp.n ...
- C专家编程学习 1
1.C语言的基本数据类型直接与底层硬件相对应. 2#define 是可能出现问题 1 2 3 4 5 #define a(y) a_ex(y) a(x)被扩展为 a_ex(x) #define a ...
- MySQL数据库高并发优化配置
在Apache, PHP, mysql的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分.对于Discuz!论坛程序也是如此,MySQL的设置是否合理优化,直接 影响到论坛的速度和承载量! ...
- JAVA常用系统函数
1.System.out.println("显示信息"); // 显示内容,并自动换行 2.Syetem.out.print("显示信息"); // 显示内容, ...
- HDU-4276 The Ghost Blows Light (树形DP+背包)
题目大意:在一个n个节点的树形迷宫中,1为起点,n为出口.每个节点上有一定价值的珠宝,在节点之间移动的时间已知,问在能走出迷宫的前提下并且不超过m的时间内能收集的最多珠宝是多少? 题目分析:在树上,从 ...
- 计算机算法-C语言-统计字母数字个数解
Question:输入一串以“?”结尾的字符,分别统计其中字母数字的个数,输出字母及数字的个数. Solve: #include<stdio.h> #include<stdlib.h ...
- 论文阅读之 A Convex Optimization Framework for Active Learning
A Convex Optimization Framework for Active Learning Active learning is the problem of progressively ...