目前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
原文:http://blog.csdn.net/xcl168/article/details/18678963