ImageView控件

老罗视频学习。


一.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 + "度");
		}
		
		
	}


效果图如下:






四.从网络下载图片到手机端显示








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值