Android UI 详解之ImageView

                                            Android UI 详解之ImageView

 

一、ImageView主要用来显示图片的,这种说法不严谨,应该说任何drawable对象都给可以使用ImageView来显示。

       除了此之外,ImageView扩展了两个子类,

                       (1)-----ImageButton

                       (2)-----ZoomButton

二、ImageView的常用方法

                        我们介绍一下控制ImageView显示图片的方法

           first:           setImageBitMap(BitMap bm):使用Bitmap位图设置该ImageView显示的图片

           second:     setImageDrawable(Drawable drawable):使用Drawable 对象设置要显示的图片

           third:          setImageResource(int resId): 使用图片资源ID设置要显示的图片(这里对应xml中android:src)

扫描二维码关注公众号,回复: 2139638 查看本文章

           forth:       setImageURI(Uri uri):使用图片的URI设置钥匙的图片

  

          有了图片资源我们看看该怎么样显示,ImageView提供了下面方法

           first:            setAdjustViewBounds(boolean) :   设置ImageView是否调整自己的边界来保持所显示的图片的长宽比

          second:      setCropToPadding(boolean):  如果设置该属性为true,该组件将会被裁剪到保留该ImageView的padding

           third:           setMaxWIdht(int): 设置ImageView的最大宽度

           forth:           setMaxHeight(int): 设置ImageView的最大高度

           fifth:             setScaleType(ImageView.ScaleType)设置所显示的图片如何缩放或移动以适应ImageView的大小

                                       上面两个红色的重点决定了如何显示图片

三、详细介绍一下setScaleType()方法可以指定的值

          first           matrix(ImageView.ScaleType.MATRIX): 使用matrix方式进行缩放

          second     fitXY(ImageView.ScaleType.FIT_XY):     对图片横向、纵向独立缩放,使得该图片完全使用与该ImageView

          third          fitStart(ImageView.ScaleType.FIT_START):  保持横纵比缩放图片,直到图片能完全显示在ImageView中(图片较长的边长与ImageView相应的边长相等),缩放完成后将图片像是在ImageView的左上角

          forth           fitCenter(ImageView.ScaleType.FIT_CENTER), 保持横纵比缩放图片,直到图片能完全显示在ImageView中(图片较长的边长与ImageView相应的边长相等),缩放完成后将图片显示在ImageView的中央,这个就是图片尽可能最大显示

          fifth            fitEnd(ImageView.ScaleType.FIT_END),....缩放完后将图片显示在右下角

          sixth           center(ImageView.ScaleType.CENTER), 不做任何缩放将图片房子啊ImageView中间

          seventh      centerCrop(ImageView.ScaleType.CENTER_CROP),保持横纵比缩放,直到完全覆盖ImageView也就是将图片的最短边能显示出来。

          eighth         centerInside(ImageView.ScaleType.CENTER_INSIDE),保持横纵比缩放图片,以使得ImageView能完全显示该图片

四、实例。图片浏览器         

            xml布局

    

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" 
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
<LinearLayout
	android:orientation="horizontal" 
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:gravity="center">
<Button android:id="@+id/plus"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="增大透明度"
	/>
<Button android:id="@+id/minus"
	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 -->
<ImageView android:id="@+id/image1"
	android:layout_width="fill_parent"
	android:layout_height="240px"
	android:src="@drawable/shuangta"
	android:scaleType="fitCenter"/>
<!-- 定义显示图片局部细节的ImageView -->	
<ImageView android:id="@+id/image2" 
	android:layout_width="120dp"
	android:layout_height="120dp"
	android:background="#00f"
	android:layout_marginTop="30dp"/>
</LinearLayout><span style="color:#009900;">
</span>
java代码

  

 

package org.sim.ui;

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;


public class ImageViewTest extends Activity
{
	// 定义一个访问图片的数组
	int[] images = new int[]{
		R.drawable.lijiang,
		R.drawable.qiao,
		R.drawable.shuangta,
		R.drawable.shui,
		R.drawable.xiangbi,
	};
	// 定义默认显示的图片
	int currentImg = 2;
	// 定义图片的初始透明度
	private int alpha = 255;
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		final Button plus = (Button) findViewById(R.id.plus);
		final Button minus = (Button) findViewById(R.id.minus);
		final ImageView image1 = (ImageView) findViewById(R.id.image1);
		final ImageView image2 = (ImageView) findViewById(R.id.image2);
		final Button next = (Button) findViewById(R.id.next);
		// 定义查看下一张图片的监听器
		next.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// 控制ImageView显示下一张图片
				image1.setImageResource(
					images[++currentImg % images.length]);
			}
		});
		// 定义改变图片透明度的方法
		OnClickListener listener = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				if (v == plus)
				{
					alpha += 20;
				}
				if (v == minus)
				{
					alpha -= 20;
				}
				if (alpha >= 255)
				{
					alpha = 255;
				}
				if (alpha <= 0)
				{
					alpha = 0;
				}
				// 改变图片的透明度
				image1.setAlpha(alpha);
			}
		};
		// 为两个按钮添加监听器
		plus.setOnClickListener(listener);
		minus.setOnClickListener(listener);
		image1.setOnTouchListener(new OnTouchListener()
		{
			@Override
			public boolean onTouch(View view, MotionEvent event)
			{
				BitmapDrawable bitmapDrawable = (BitmapDrawable) image1
						.getDrawable();
				// 获取第一个图片显示框中的位图
				Bitmap bitmap = bitmapDrawable.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;
			}
		});
	}
}

         

猜你喜欢

转载自blog.csdn.net/ustory/article/details/42521937