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. Native VS H5 VS React Native

    现在软件行业已经跨入大前端时代,所以势必学一点前端的知识.本来移动端开发都是使用各自平台的语言,如iOS端使用OC,swift:Android使用java,但是随着H5的出现,导致移动端Native出 ...

  2. Cash Machine_多重背包

    Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver ap ...

  3. 【转】React.js 概览

    原文转自:http://segmentfault.com/blog/jiyinyiyong/1190000000693651 这里关于 React 的收集的消息的一个提纲, 具体内容看下边的链接,微博 ...

  4. 【转】编写更好的CSS代码

    原文转自:http://blog.jobbole.com/55067/ 编写好的CSS代码,有助提升页面的渲染速度.本质上,引擎需要解析的CSS规则越少,性能越好.MDN上将CSS选择符归类成四个主要 ...

  5. Apache 中 .htaccess 文件设置技巧16则

    .htaccess 文件 (Hypertext Access file) 是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的功能.. ...

  6. lstm的debug模式下编译不行貌似

    待验证,因为也可能是 USE_CUDNN := 1被注释掉的原因

  7. Git 基础学习篇(应用-windows篇)

    此篇教程主要是讲应用,因为理论,,,额,我也说不出来.大家要深入学习还是看廖老师的教程吧. 可以把这篇当作一个简单应用的参考,因为当初看廖老师的也难看啊!!! 以下是资料: 廖雪峰-Git教程 [Gi ...

  8. Single Number II ——位操作

    题意: 给定两个32位的整数 N 和 M,以及表示比特位置的 i 与 j .编写一个方法,将 M 插入 N,使得 M 从 N 的第 j 位开始,到第 i 位结束.假定从 j 位到 i 位足以容纳M. ...

  9. sql server触发器中增删改判断

    触发器生效逻辑 在Before或者After之后使用INSERT,DELETE,UPDATE 触发器内情况判断 插入 if exists(select 1 from inserted) and not ...

  10. java03实验截图