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 不 ...
随机推荐
- Asp.Net请求管道中的19个事件
请求管道中的19个事件.(1)BeginRequest: 开始处理请求(2)AuthenticateRequest授权验证请求,获取用户授权信息(3):PostAuthenticateRequest获 ...
- Nearest number - 2_暴力&&bfs
Description Input is the matrix A of N by N non-negative integers. A distance between two elements A ...
- Android CardView设置成普通的Framelayout
比如可以这样写代码,CardView就变成普通的FrameLayout: <?xml version="1.0" encoding="utf-8"?> ...
- CODEVS1001 舒适的路线 (并查集)
对所有边从大到小排序,枚举最大边,O(m)验证,用并查集维护图是否联通. program CODEVS1001; ; maxn=; INF=; type arr=record u,v,w:int64; ...
- [转]Golang- import 导入包的语法
http://blog.csdn.net/zhangzhebjut/article/details/25564457 一 包的导入语法 在写Go代码的时候经常用到import这个命令用来导入 ...
- JS删除HTML元素问题
<div id='one'> <div>1</div> <div>2</div> </div> <div id=" ...
- Qt的QLineEdit显示密码
ui->lineEdit->setEchoMode( QLineEdit::Password );
- Codeforces Round #298 (Div. 2) B. Covered Path
题目大意: 一辆车,每秒内的速度恒定...第I秒到第I+1秒的速度变化不超过D.初始速度为V1,末速度为V2,经过时间t,问最远能走多远. 分析 开始的时候想麻烦了.讨论了各种情况.后来发现每个时刻的 ...
- <%# Convert.ToDecimal(Eval("IMLognum")).ToString("F0") %>
数据绑定转类型 <%# Convert.ToDecimal(Eval("IMLognum")).ToString("F0") %> 在项目中绑定数据 ...
- clientX,screenX,pageX,offsetX的异同 【转载】
首先说明一下以上对象都是指javascript中的,不包含其他语言. pageX/pageY: 鼠标相对于整个页面的X/Y坐标.注意,整个页面的意思就是你整个网页的全部,比如说网页很宽很长,宽2000 ...