目前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