`
01jiangwei01
  • 浏览: 545845 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

安卓课程二十三 ImageView实现适屏和裁剪图片

 
阅读更多

AndroidManifest.xml

<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" 
    android:orientation="vertical"
    >
    <Button
        android:id="@+id/selectImageBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttton_seleclocal" />
    
     <Button
         android:id="@+id/cutImageBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttton_cutImg" />
    <ImageView  android:id="@+id/imageView"
        android:contentDescription="@string/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

 MainActivity.java

package com.example.ImageView2;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity implements OnClickListener {
	private Button selectImageBtn;
	private Button cutImageBtn;
	
	private ImageView imageView;
	/**
	 * 声明两个静态变量,主要用于意图的返回的标志
	 */
	private static final int IMAGE_SELECT = 1;
	private static final int IMAGE_CUT = 2;
	
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		selectImageBtn = (Button) findViewById(R.id.selectImageBtn);
		cutImageBtn = (Button) findViewById(R.id.cutImageBtn);
		
		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== IMAGE_SELECT){
				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);
					 //对图片的宽度和高度对应手机的屏幕进行匹配
					 //如果大于1,表示图片高度大小大于手机高度
					 int hRatio = (int) Math.ceil(factory.outHeight/(float)dh);
					//如果大于1,表示图片宽度大小大于手机宽度
					 int wRatio = (int) Math.ceil(factory.outWidth/(float)dw);
					 
					 //缩放到宽度为1/radio的尺寸和1/radio^2像素
					 if(hRatio>1 || wRatio>1) {
						 if(hRatio>wRatio){
							 factory.inSampleSize=hRatio;
						 }else  {
							 factory.inSampleSize=wRatio;
						 }
					 }
					 factory.inJustDecodeBounds = false;
					 //裁剪图片,进行适屏的操作
					 bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, factory);
					 imageView.setImageBitmap(bitmap);
				}catch(Exception e){}
			}else 	if(requestCode== IMAGE_CUT){
				//进行裁剪操作
				Bitmap bitmap = data.getParcelableExtra("data");
				imageView.setImageBitmap(bitmap);
				
			}
		}
	}



	public void onClick(View v) {
		switch(v.getId()){
		case R.id.selectImageBtn:
			//声明一个意图,使用android自身带的一个意图说明,提取手机的图片.
			//参数指定提取路径
			Intent intent = new Intent(Intent.ACTION_PICK,
					android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
			startActivityForResult(intent, IMAGE_SELECT);
			break;
		case R.id.cutImageBtn:
			Intent  intent2 = getImageClipIntent();
			startActivityForResult(intent2,IMAGE_CUT);
			break;
		
		}
		
	}
	private Intent getImageClipIntent(){
		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;
	}

}

 使用豌豆荚链接,选择图片上传一个图片进行测试

分享到:
评论

相关推荐

    android课程设计图片显示器

    【Android课程设计:图片显示器详解】 在Android应用开发中,图片显示器是一个常见且重要的功能,它允许用户查看、浏览和处理图像。这个课程设计提供了一个现成的图片显示器,可以直接添加到项目中运行,无需进行...

    安卓期末课程设计、一看仿微信的App 包含源代码、使用手册和心得体会

    如果支持头像更换,还需处理图片裁剪和上传。 整个项目不仅要求实现以上功能,还要注重用户体验和性能优化。例如,使用Loader框架处理数据异步加载,避免主线程阻塞;使用Fragment进行屏幕适配,提升多屏设备的兼容...

    Android平台的图像控件,可以异步加载网络图片、项目资源和本地图片,并且支持双指缩放、图片的基本处理.zip

    在项目设计和实现过程中,我们还需要考虑到性能优化,例如使用内存高效的图片格式(如WebP),避免内存泄漏,以及合理使用软引用和弱引用来管理Bitmap。此外,适配不同的屏幕尺寸和密度也非常重要,需要确保图片在...

    基于Andriod环境的图片浏览器设计

    这个课程设计项目旨在让学生掌握Android应用开发的基本技能,并能够实现一个功能完善的图片浏览应用程序。 首先,Android是Google开发的一个开源操作系统,主要用于移动设备,如智能手机和平板电脑。开发Android...

    适合android初学者的小例子

    学习如何从资源文件或网络加载图片,以及调整图片大小和裁剪是基础技能。 7. **选择器(Spinner)**:Spinner提供了一个下拉列表,通常用于显示有限的选项供用户选择。了解如何填充数据源和处理选择事件是关键。 8...

    Android——仿美图秀秀和IOS系统的相机胶卷(实用1).zip

    在Android平台上,开发一款类似美图秀秀和iOS相机胶卷的应用是一项挑战性的任务,它涉及到多媒体处理、图片展示、用户交互以及系统级相机接口等多个技术领域。本项目旨在提供一个实用的源码示例,适合于毕业设计或...

    diary3 (2).zip

    1. "android 课设 (1).pdf":这可能是一个包含项目介绍、设计思路、技术选型、实现步骤、测试结果等内容的课设报告,对于理解项目的设计和实现非常有帮助。 2. "diary3":这可能是项目源代码文件夹,包含了实现日记...

    21春电科《移动互联网技术》课程在线作业3答案.docx

    - ImageView用于显示图片,可以显示部分图片通过设置裁剪区域。 14. **隐式Intent**: - 隐式Intent通过IntentFilter寻找与之匹配的组件,通常用于跨应用通信。 15. **Android进程管理**: - 进程由...

    DailySelfie:Coursera 每日自拍项目

    7. **图片处理**: 可能涉及对拍摄的照片进行简单的编辑,如裁剪、旋转或调整大小,这需要了解 Bitmap 的操作和使用第三方库如 Glide 或 Picasso。 8. **文件系统操作**: 知道如何在 Android 设备上保存和读取文件,...

Global site tag (gtag.js) - Google Analytics