Android UI控件五

Android UI控件五

一、ImageView显示图像控件

ImageView主要是用来显示图片的控件,可以对图片进行放大、缩小和旋转的功能。

Android:scaleType属性指定ImageView控件显示图片的方式,例如:center表示图像以不缩放的方式显示在ImageView控件的中心,如果设置为fitCenter,表示图像按照比例缩放至合适的位置,并在ImageView控件的中心。

1.ImageView控件的基本用法

public class MainActivity extends Activity {

	private ImageView imageView;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		imageView = (ImageView) findViewById(R.id.imageview01);
		// 设置第一张图片的比例大小
		imageView.setLayoutParams(new LinearLayout.LayoutParams(50, 50));
		setTitle("height=" + imageView.getLayoutParams().height + ">>width="
				+ imageView.getLayoutParams().width);
	}
}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="scaleType:center为不缩放显示在ImageView控件中心" />

    <ImageView
        android:id="@+id/imageview01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="center"
        android:src="@drawable/bg" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="scaleType:fitcenter按比例缩放显示在ImageView控件中心" />

    <ImageView
        android:id="@+id/imageview01"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="#000"
        android:padding="20dp"
        android:scaleType="fitCenter"
        android:src="@drawable/bg" />

</LinearLayout>

2.ImageView实现试屏和裁剪图片的功能


public class MainActivity extends Activity implements OnClickListener {

	private Button selectImageBtn, cutImageBtn;
	private ImageView imageView;
	private static final int SELECT_CODE = 1;
	private static final int CUT_CODE = 2;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		selectImageBtn = (Button) findViewById(R.id.selectbutton);
		cutImageBtn = (Button) findViewById(R.id.cutbutton);
		imageView = (ImageView) findViewById(R.id.imageview);
		imageView.setBackgroundColor(Color.BLACK);

		selectImageBtn.setOnClickListener(this);
		cutImageBtn.setOnClickListener(this);
	}

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (resultCode == RESULT_OK) {
			// 处理图片按照手机的屏幕大小实现
			if (requestCode == SELECT_CODE) {
				Uri uri = data.getData();// 获得图片的路径
				int dw = getWindowManager().getDefaultDisplay().getWidth();
				int dh = getWindowManager().getDefaultDisplay().getHeight() / 2;
				try {
					// 实现对图片裁剪的类,是一个匿名内部类
					BitmapFactory.Options factory = new BitmapFactory.Options();
					factory.inJustDecodeBounds = true;// 如果设置为true,允许查询图片不是按照像素分配给内存
					Bitmap bitmap = BitmapFactory.decodeStream(
							getContentResolver().openInputStream(uri), null,
							factory);
					// 对图片宽高进行匹配
					int hRatio = (int) Math
							.ceil(factory.outHeight / (float) dh);
					// 如果结果大于1,说明图片的高度大于手机屏幕的高度
					int wRatio = (int) Math
							.ceil(factory.outHeight / (float) dw);
					// 如果结果大于1,说明图片的宽度大于手机屏幕的宽度
					// 缩放到1/radio的尺寸和 radia^2像素
					if (hRatio > 1 || wRatio > 1) {
						if (hRatio > wRatio) {
							factory.inSampleSize = hRatio;
						} else {
							factory.inSampleSize = wRatio;
						}
					}
					factory.inJustDecodeBounds = false;
					// 实用化BitmapFactory对图片进行试屏的操作
					bitmap = BitmapFactory.decodeStream(getContentResolver()
							.openInputStream(uri), null, factory);
					imageView.setImageBitmap(bitmap);
				} catch (Exception e) {
					e.printStackTrace();
				}
			} else if (requestCode == CUT_CODE) {
				Bitmap bitmap = data.getParcelableExtra("data");
				imageView.setImageBitmap(bitmap);
			}
		}
	}

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.selectbutton:
			// 如何提取手机的图片,并且进行选择图片的功能
			Intent intent1 = new Intent(
					Intent.ACTION_PICK,
					android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);// 打开手机图片库
			startActivityForResult(intent1, SELECT_CODE);
			break;

		case R.id.cutbutton:
			Intent intent2 = getIamgeClipIntent();
			startActivityForResult(intent2, CUT_CODE);
			break;
		}
	}

	private Intent getIamgeClipIntent() {
		Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
		// 实现对图片的裁剪,必须设置图片的属性和大小
		intent.setType("image/*");// 获取任意的图片类型
		intent.putExtra("crop", "true");// 滑动选中图片
		intent.putExtra("aspectX", 1);// 剪切框的比例
		intent.putExtra("aspectY", 1);// 剪切框的比例
		intent.putExtra("outputX", 80);// 指定输出图片的大小
		intent.putExtra("outputY", 80);
		intent.putExtra("return-data", true);
		return intent;
	}

}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/selectbutton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SelectImage" />

    <Button
        android:id="@+id/cutbutton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="CutImage" />

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>


3.ImageView实现图片旋转和缩放功能

实现图像的缩放:改变ImagView控件的大小,将<ImageView>标签的android:scaleType的属性设置为fitCenter,要想实现图像的旋转可以使用android.graphics.Matirx类的setRotate来实现。


public class MainActivity extends Activity implements OnSeekBarChangeListener {

	private int minWidth = 80;
	private TextView tv1, tv2;
	private ImageView imageView;
	private SeekBar seekBar1, seekBar2;
	private Matrix matrix = new Matrix();

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		tv1 = (TextView) findViewById(R.id.textview01);
		tv2 = (TextView) findViewById(R.id.textview02);
		imageView = (ImageView) findViewById(R.id.imageview01);
		seekBar1 = (SeekBar) findViewById(R.id.seekbar01);
		seekBar2 = (SeekBar) findViewById(R.id.seekbar02);
		seekBar1.setOnSeekBarChangeListener(this);
		seekBar2.setOnSeekBarChangeListener(this);

		DisplayMetrics displayMetrics = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
		seekBar1.setMax(displayMetrics.widthPixels - minWidth);
	}

	public void onProgressChanged(SeekBar seekBar, int progress,
			boolean fromUser) {
		if (seekBar.getId() == R.id.seekbar01) {
			int width = minWidth + progress;
			int height = (int) (width * 3 / 4.0);
			imageView.setLayoutParams(new LinearLayout.LayoutParams(width,
					height));
			tv1.setText("宽度:" + width + "dp,高度:" + height + "dp");
		} else if (seekBar.getId() == R.id.seekbar02) {
			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);
			tv2.setText("旋转" + progress + "度");
		}
	}

	public void onStartTrackingTouch(SeekBar seekBar) {
	}

	public void onStopTrackingTouch(SeekBar seekBar) {
	}

}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageview01"
        android:layout_width="200dp"
        android:layout_height="150dp"
        android:scaleType="fitCenter"
        android:src="@drawable/bg" />

    <TextView
        android:id="@+id/textview01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="宽度:200dp,高度:150dp" />

    <SeekBar
        android:id="@+id/seekbar01"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:max="240"
        android:progress="120" />

    <TextView
        android:id="@+id/textview02"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="旋转0度" />

    <SeekBar
        android:id="@+id/seekbar02"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:max="360"
        android:progress="0" />

</LinearLayout>

4.ImageView从网络上获取图像




public class MainActivity extends Activity {

	private Button btn;
	private ImageView imageView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		btn = (Button) findViewById(R.id.button);
		imageView = (ImageView) findViewById(R.id.imageview);

		btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				try {
					/*InputStream inputStream = HttpUtils.getImageInputStream();
					Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
					imageView.setImageBitmap(bitmap);*/
					
					byte[] data = HttpUtils.getImageArray();
					Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
					imageView.setImageBitmap(bitmap);
				} catch(Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
}

HttpUtils类
public class HttpUtils {

	//访问的图片地址
	private static final String path = "http://192.168.137.98:8080/web/101.jpg";

	/**
	 * 以字节流的形式返回
	 * 
	 * @return
	 * @throws Exception
	 */
	public static InputStream getImageInputStream() throws Exception {
		InputStream inputStream = null;
		URL url = new URL(path);
		if (url != null) {
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(5000);
			conn.setRequestMethod("GET");
			conn.setDoInput(true);
			if (conn.getResponseCode() == 200) {
				inputStream = conn.getInputStream();
			}
		}
		return inputStream;
	}

	/**
	 * 以字节数组的形式返回
	 */
	public static byte[] getImageArray() throws Exception {
		byte[] data = null;
		InputStream inputStream = null;
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		URL url = new URL(path);
		if (url != null) {
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(5000);
			conn.setRequestMethod("GET");
			conn.setDoInput(true);
			byte[] buffer = new byte[1024];
			int len = 0;
			if (conn.getResponseCode() == 200) {
				inputStream = conn.getInputStream();
				while ((len = inputStream.read(buffer)) != -1) {
					outputStream.write(buffer, 0, len);
				}
				data = outputStream.toByteArray();
			}
			inputStream.close();
		}
		return data;
	}

}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="从网络上获取图片" />

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值