老罗视频学习。
一.ImageView控件的基本使用。
第一个imageview控件,同比例显示图片。
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="scaleType:center ,放在ImageView的中间"></TextView>
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#F00"
android:src="@drawable/bg"
android:scaleType="center"
></ImageView>
第二个imageview控件,同比例缩放显示图片。
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:layout_marginTop="20dp"
android:text="scaleType:fitcenter 为缩放,按照比例ImageView的中间"></TextView>
<ImageView
android:id="@+id/imageView2"
android:layout_width="120dp"
android:layout_height="160dp"
android:background="#FFF"
android:src="@drawable/bg"
android:scaleType="fitCenter"
android:padding="10dp"
></ImageView>
效果图如下:
或者在程序中动态修改属性,显示图片:
public ImageView imageView1;
imageView1 = (ImageView)findViewById(R.id.imageView1);
imageView1.setLayoutParams(new LinearLayout.LayoutParams(200, 100));
setTitle("height:"+imageView1.getLayoutParams().height+"--width-->>"+imageView1.getLayoutParams().width);
那么会截图后显示
效果如下:
二.ImageView适屏显示图片,裁剪图片。
首先定义按钮控件的监听事件,内容如下:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.selectButton:
//提取手机图片库的图片,并选择显示
//定义一个意图,打开手机图片库
//第二个参数是用户提供者的媒体库的图片库的指定路径
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, IMAGE_SELECT);
break;
case R.id.cutButton:
//如果点击裁剪,要声明一个裁剪的意图
Intent intent2 = getImageClipIntent();
startActivityForResult(intent2, IMAGE_CUT);
break;
default:
break;
}
}
定义响应result的重载函数:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_OK) {
//处理图片,按照屏幕大小显示,按照屏幕适屏操作
if (resultCode == IMAGE_SELECT) {
Uri uri = data.getData();//获得图片的路径
int dw = getWindowManager().getDefaultDisplay().getWidth();//获得屏幕的宽度
int dh = getWindowManager().getDefaultDisplay().getHeight()/2;//获得屏幕的高度
try {
//实现对图片的裁剪的类,是一个匿名的内部类
BitmapFactory.Options factory = new BitmapFactory.Options();
//如果设置为true的话,运行查询图片不是按照像素分配内存。
factory.inJustDecodeBounds = true;
//第一个参数,从当前打开的uri地址中把图片传递进来
//把手机图片库的图片存入bmpBitmap中
Bitmap bmpBitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, factory);
//因为要适屏显示,所以对图片按照手机的大小进行匹配。
//图片的高度除以手机的高度,向下取整,如果大于一,说明图片的高度大于手机屏幕的高度
int hRadio = (int)Math.ceil(factory.outHeight/(float)dh);
//图片的宽度除以手机的宽度,向下取整,如果大于一,说明图片的宽度大于手机屏幕的宽度
int wRadio = (int)Math.ceil(factory.outWidth/(float)dw);
//宽度高度都大于1
if(hRadio > 1 || wRadio>1){
if(hRadio>wRadio){//如果高度高的比例大于宽度宽的比例,那么按照高度的比例来进行
factory.inSampleSize = hRadio;
}else {//相反,如果高度高的比例小于宽度宽的比例,那么按照宽度的比例来进行
factory.inSampleSize = wRadio;
}
}
factory.inJustDecodeBounds = false;
//使用bitmapFactory对图片进行适屏操作
bmpBitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, factory);
imageView.setScaleType(ScaleType.CENTER_CROP);
imageView.setImageBitmap(bmpBitmap);
//imageView.setImageResource(R.drawable.bg);
} catch (Exception e) {
// TODO: handle exception
}
}else if (resultCode == IMAGE_CUT) {
//表示要裁剪图片
Bitmap bitmap = data.getParcelableExtra("data");//此处data必须和意图里边的data一致intent.putExtra("return-data", "true");
imageView.setScaleType(ScaleType.CENTER_CROP);
imageView.setImageBitmap(bitmap);
}
}
}
getImageClipIntent函数如下:
private Intent getImageClipIntent() {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_GET_CONTENT,null);
//要实现对图片的裁剪,必须要设置图片的属性和大小
intent.setType("image/*");//获取任意的图片类型
intent.putExtra("crop", "true");//此句可以让用户在图片上滑动
intent.putExtra("aspectX", 1);//表示剪切框的比例1:1的效果
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 80);//指定输出图片的大小
intent.putExtra("outputY", 80);//
intent.putExtra("return-data", "true");//设置有返回值
return intent;
}
效果如下:
点击选择图片,可以选择手机里的图片,然后显示。
点击图片进行裁剪,可以选择手机里的图片,然后如下图可以裁剪:
但是,选择图片和裁剪后不能显示在ImageView控件,暂时先不解决,稍后解决。
三.ImagaView控件加载图片实现放大缩小和旋转。
首先定义一下用到的变量或对象。
private int minWidth = 80;
private ImageView imageView;
private TextView textView1,textView2;
private SeekBar seekBar1,seekBar2;
private Matrix matrix = new Matrix();//android矩阵类
获取屏幕的分辨率,并且设置seekbar1的最大值。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
seekBar1.setMax(dm.widthPixels-minWidth);
关于DisplayMetrics类介绍如下链接很详细:
http://blog.csdn.net/zhangqijie001/article/details/5894872#comments
整个类既继承自Activity又继承自OnSeekBarChangeListener类。
public class ImageViewActivity3 extends Activity implements OnSeekBarChangeListener{
onProgressChanged函数如下:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// TODO Auto-generated method stub
if (seekBar.getId() == R.id.seekbar1) {//调整大小
int newWidth = progress + minWidth;
int newheight = (int)(newWidth*4/3);//此处4和3是按照那个ImageView的比例设置的,这样不会变形
imageView.setLayoutParams(new LinearLayout.LayoutParams(newheight, newheight));
textView1.setText("图像宽度:"+newWidth + "图像高度:"+newheight);
}else if (seekBar.getId() == R.id.seekbar2) {//调整旋转度
Bitmap bitmap = ((BitmapDrawable)(getResources().getDrawable(R.drawable.bg))).getBitmap();
matrix.setRotate(progress);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(),matrix,true);
imageView.setImageBitmap(bitmap);
textView2.setText(progress + "度");
}
}
效果图如下:
四.从网络下载图片到手机端显示