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)效果图

  ImageView及其子类

 

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及其子类ImageView及其子类

        

你可能感兴趣的:(imageview)