ImageView控件设置及特性集合演示

目前ImageView控件支持png,jpg,gif,bmp这四种格式的图片显示

分两个部份记录:

      一。代码设置ImageView图

      二。集中展示ImageView控件各属性显示效果的例子

一。代码设置ImageView图片:
方法一:直接从res中取出图片
ImageView imgView = (ImageView)findViewById(R.id.ImageView01);
imgView.setImageResource(R.drawable.img00);

方法二:利用BitmapFactory得到位图,并显示
BitmapFactory 有好几个方法生成图片,包括InputStream 或从Web服务器读取后生成图片.
做一些特效什么的,主要就依赖于这个。

a. 从res中取
imgView.setImageBitmap(BitmapFactory.decodeResource(
this.getResources(),R.drawable.img01));

b. 从网上取图片
URL picUrl = new URL("http://www.google.com.hk/images/xxxxxx.jpg");
Bitmap pngBM = BitmapFactory.decodeStream(picUrl.openStream()); 
imageView.setImageBitmap(pngBM);

c.把res转成流,再转为BitmapDrawable进行设置
Resources res = getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.img02);
BitmapDrawable bmpDraw=new BitmapDrawable(bmp);
ImageView imgView = (ImageView)findViewById(R.id.ImageView02);
imgView.setImageDrawable(bmpDraw);


BitmapFactory的作用是从不同的资源,包括文件,流,和字节数组中创建一个Bitmap对象.
decodeByteArray()用于从一个字节数组转成一个bitmap图片。函数原型如下:
public static Bitmap decodeByteArray (byte[] data, int offset, int length, BitmapFactory.Options opts)

// In addtion,the BitmapFactory has several methods of creating a Bitmap,including from a byte
// array and an InputStream. You could use the InputStream method to read an image 
// from a web server,create the Bitmap image,and then set the ImageView from there.
方法三:从指定目录上取图片
imgView.setImageDrawable(
Drawable.createFromPath("/mnt/sdcard/img01.jpg"));

方法四: 用Uri方式从指定目录上取图片
imgView.setImageURI(Uri.parse("file://mnt/sdcard/img01.jpg"));

还有一个注意的小细节是:
setImageResource(id) 能依据设备分辨率自动把图片进行大小缩放适配
setImageBitmap(BitmapFactory.decodeResource(res,id)) 不能自动适配,只能写代码需要手工调。


二。集中展示ImageView控件各属性显示效果的例子

         可在这个例子中,单击不同选项展示出相应的效果。

布局文件:

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center" 
    android:columnCount="3"
    android:orientation="horizontal" >
	
    <!-- 显示风格 -->
	<RadioGroup android:id="@+id/rBtnGrp" 
			android:orientation="vertical" 		
			android:layout_row="0"
	        android:layout_column="0"        	 
	        android:layout_rowSpan="3" >        
		<RadioButton android:id="@+id/RBtnfitXY" android:text="fitXY" />
		<RadioButton android:id="@+id/RBtnfitStart"	 android:text="fitStart"/>
		<RadioButton android:id="@+id/RBtnfitCenter" android:text="fitCenter"/>	
		<RadioButton android:id="@+id/RBtnfitEnd" android:text="fitEnd"	/>		
		<RadioButton android:id="@+id/RBtncenter" android:text="center"
		  			 android:checked="true"/>			
		<RadioButton android:id="@+id/RBtncenterCrop" android:text="centerCrop"	/>	
		<RadioButton android:id="@+id/RBtncenterInside" android:text="centerInside"	/>	
	</RadioGroup>
	
     <TextView android:id="@+id/styleID"
         	android:text="center"                   
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"				        
            android:layout_row="0"
        	android:layout_column="1"
        	android:layout_columnSpan="2"
        />           	  
    	<ImageView android:id="@+id/xcldemo"
	        android:background="#FFE4C4"         
	       	android:layout_column="1"
	       	android:layout_columnSpan="2"
	        android:layout_gravity="fill"	
		    android:scaleType="center"
		    android:src="@drawable/emoji_112"/>	
     	<TextView android:id="@+id/styleDesc"
         	android:text="原图大小显示,超过外部大小时,\n只显示中间部份"                   
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"				        
       		android:layout_row="1"
       	 	android:layout_rowSpan="2"
       	 	android:layout_columnSpan="2"
        />  
   
      <!--  渲染 Tint -->
      <TextView android:id="@+id/styleTint"
          	android:layout_column="0"
       		android:layout_columnSpan="4"  
         	android:text="Tint:将图片渲染成指定的颜色" />     
      <ImageView
       	android:layout_column="0"
       	android:layout_columnSpan="1"     
	    android:background="@android:color/white" 	 
	    android:src="@drawable/emoji_112"/>        
       <TextView 
          	android:layout_column="1"    
         	android:text="前面是原图,后面是渲染\n成指定的黄色后的效果。" />         
       <ImageView 
	        android:layout_column="2"
	        android:layout_columnSpan="1"     
		    android:background="@android:color/white" 
		    android:tint="#ffff00" 
		    android:src="@drawable/emoji_112"/>
       
       <!--  定制大小不失真-->     	       
       <TextView android:id="@+id/styleNormal"
             android:layout_column="0"
      		 android:layout_columnSpan="4"  
        	 android:text="定制大小不失真:\n
						1 设置setAdjustViewBounds为true;\n
						2 设置maxWidth,MaxHeight;\n
						3 layout_width和layout_height为wrap_content;" />
         <ImageView 
	    	android:layout_rowSpan="1"
	     	android:layout_column="1"
	     	android:layout_columnSpan="1"      
	        android:adjustViewBounds="true"
	        android:maxWidth="136dip"
			android:maxHeight="136dip"
			android:layout_width="wrap_content"
	        android:layout_height="wrap_content"	
			android:background="#FFE4C4" 		
	    	android:src="@drawable/emoji_112"/>
</GridLayout>
代码部份:

package com.xcl.imageviewdemo;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.MultiAutoCompleteTextView;
import android.widget.RadioGroup;
import android.widget.TextView;

public class MainActivity extends Activity {
	
	TextView sid ;
	TextView sdesc;
	ImageView ivdemo;
	TextView ScaleType;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
			
		this.setTitle("ImageView Demo");
		
		sid = (TextView)findViewById(R.id.styleID);
		sdesc = (TextView)findViewById(R.id.styleDesc);
		ivdemo = (ImageView)findViewById(R.id.xcldemo);
		
		RadioGroup radGrp = (RadioGroup)findViewById(R.id.rBtnGrp);		
		radGrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup arg0, int arg1) {
				// TODO Auto-generated method stub
				switch(arg1){
				case -1:
					break;
				case R.id.RBtnfitXY:
					sid.setText("fitXY");
					sdesc.setText("不按比例拉伸图片,\n直接拉伸原图直到与外部相同");	
					ivdemo.setScaleType(ImageView.ScaleType.FIT_XY);
					break;
				case R.id.RBtnfitStart:
					sid.setText("fitStart");
					sdesc.setText("按比例拉伸图片,\n并靠左显示,高度与外部相同");		
					ivdemo.setScaleType(ImageView.ScaleType.FIT_START);
					break;
				case R.id.RBtnfitCenter:
					sid.setText("fitCenter");
					sdesc.setText("按比例拉伸图片,并居中显示\n,高度与外部相同");	
					ivdemo.setScaleType(ImageView.ScaleType.FIT_CENTER);
					break;
				case R.id.RBtnfitEnd:
					sid.setText("fitEnd");
					sdesc.setText("按比例拉伸图片,并靠右显示,\n高度与外部相同");	
					ivdemo.setScaleType(ImageView.ScaleType.FIT_END);
					break;
				case R.id.RBtncenter:
					sid.setText("center");
					sdesc.setText("原图大小显示,超过外部大小时,\n只显示中间部份");															
					ivdemo.setScaleType(ImageView.ScaleType.CENTER);
					break;
				case R.id.RBtncenterCrop:
					sid.setText("fitEnd");
					sdesc.setText("按比例扩大图片的size\n居中显示,使得图片长 (宽)\n等于或大于View的长(宽)");	
					ivdemo.setScaleType(ImageView.ScaleType.CENTER_CROP);
					break;
				case R.id.RBtncenterInside:
					sid.setText("center");
					sdesc.setText("将图片的内容完整居\n中显示,通过按比例缩小或\n原来的size使得\n图片长/宽等于\n或小于View的长/宽");															
					ivdemo.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
					break;	
					
				default:
					break;		
				}
			}
		});

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


官网地址: http://developer.android.com/reference/android/widget/ImageView.html




MAIL: xcl_168@aliyun.com

BLOG:http://blog.csdn.net/xcl168


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值