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及其子类的更多相关文章

  1. Android用户界面 UI组件--ImageView及其子类ImageButton,QuickContactBadge附带Draw9Patch工具说明

    1.ImageView 常用属性: android:src 设置可绘制对象作为 ImageView 显示的内容 android:cropToPadding 如果设置为true,图片裁剪到保留该Imag ...

  2. ImageView的子类无法加载图片

    在图片预览时,偶现图片无法现实,在查看程序的时候发现Bitmap是实际存在的,但是在ImageView中缺绘制不出来,这个问题困然了我很久,查看代码也查不出原因,再加上是偶现的,查原因时费了不少时间. ...

  3. ImageView及其子类(三)

    实例:使用QuickContactBadge关联联系人      QuickContactBadge继承了ImageView,因此它的本质也是图片,也可以通过android:src属性指定他显示的图片 ...

  4. ImageView及其子类(一)

    ImageView继承自View组件,它的主要功能是用于显示图片——实际上这个书法不太严谨因为他能显示的不仅是图片,任何Drawable对象都可以使用ImageView来显示.除此之外,ImageVi ...

  5. ImageView及其子类(二)

    实例:强大的图片按钮 下面的实例定义了多个图片按钮,并定义了两个ZoomButton.两个ZoomButton的android:src属性分别指定为@android:drawable/btn_minu ...

  6. Android应用系列:完美运行GIF格式的ImageView(附源码)

    前言 我们都知道ImageView是不能完美加载Gif格式的图片,如果我们在ImageView中src指定的资源是gif格式的话,我们将会惊喜的发觉画面永远停留在第一帧,也就是不会有动画效果.当然,经 ...

  7. Android零基础入门第22节:ImageView的属性和方法大全

    原文:Android零基础入门第22节:ImageView的属性和方法大全 通过前面几期的学习,TextView控件及其子控件基本学习完成,可以在Android屏幕上显示一些文字或者按钮,那么从本期开 ...

  8. Android 中常见控件的介绍和使用

    1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...

  9. 【转】GitHub 排名前 100 的安卓、iOS项目简介

    GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...

随机推荐

  1. swift系统学习控件篇:UIProgressView+NSTimer+UIstepper+UIAlertController

    工作之余,学习下swift大法.把自己的学习过程分享一下.当中的布局很乱,就表在意这些细节了.直接上代码: UIProgressView+NSTimer+UIstepper UIStepper UIP ...

  2. 10、网页制作Dreamweaver(扩展:各浏览器对 onunload 事件的支持与触发条件实现有差异)

    标准参考 在 HTML 4.01 规范中关于 onunload 事件的描述是:当 document 从 window 中移除时,触发 onunload 事件. 关于 HTML 4.01 规范中 onu ...

  3. HDU4897 (树链剖分+线段树)

    Problem Little Devil I (HDU4897) 题目大意 给定一棵树,每条边的颜色为黑或白,起始时均为白. 支持3种操作: 操作1:将a->b的路径中的所有边的颜色翻转. 操作 ...

  4. [转]LUA C 互调

    组件工厂 ------3D游戏研发 LUA和C之间的函数调用 1.1 从C程序调用LUA函数 LUA的函数和普通变量一样也是First Class Variable类型,可以看作函数指针变量参与栈操作 ...

  5. event.keyCode|| event.which.的用法

    HTML 用户名:<input type="text" id="UserAccount" onKeyPress="JumpByEnter(Use ...

  6. 设置mysql远程连接root权限

    在远程连接mysql的时候应该都碰到过,root用户无法远程连接mysql,只可以本地连,对外拒绝连接.需要建立一个允许远程登录的数据库帐户,这样才可以进行在远程操作数据库.方法如下:默认情况下MYS ...

  7. SAP 审计

    SAP 权限审计:SA38--- RSUSR002 还有其它事务码待续,,,

  8. jquery中prop()方法和attr()方法的区别

    最近在用jquery的时候遇到一个问题,那就是attr()方法,发现这个方法有时候使用会有一些说不出原因的问题.翻翻自己之前笔记发现,还有个函数prop(). 这两个函数都可以用来获取属性. jque ...

  9. c 函数及指针学习 4

    1数组和指针声明的差别 声明数组:为数组分配内存,为数组名分配内存(指针常量 4个字节) 指针:为指针分配内存(指针变量 4个字节) 1 2 3 4 5 6 7 8 9 10 #include < ...

  10. SimPholders2 模拟器 App 文件路径查看工具

    SimPholder2.app 官网下载地址:http://www.simpholders.com ​当使用 Xcode beta 版本切换到 Xcode 正式版本时,点击 SimPholders2. ...