`
01jiangwei01
  • 浏览: 541956 次
  • 性别: 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开发视频教程》第十五集:ImageView实现适屏和裁剪图片的功能.zip

    《Android开发视频教程》第十五集:ImageView实现适屏和裁剪图片的功能.zip

    Imageview实现适屏显示,裁剪图片。

    本文将详细讲解如何利用ImageView实现适屏显示,并探讨如何裁剪图片并将其显示出来。 首先,我们要了解适屏显示的概念。适屏显示是指应用程序能够根据不同的设备屏幕尺寸和分辨率自适应调整布局,确保用户在不同...

    Android ImageView图片放大到全屏显示

    总的来说,实现Android ImageView图片放大到全屏显示并支持局部拉伸放大,需要理解Android的触摸事件处理机制,以及ImageView的缩放属性。通过自定义ImageView和手势检测,我们可以实现丰富的图片查看交互。同时,...

    HurleyWong#TechNote#Android中ImageView实现平铺多张图片1

    Android中ImageView实现平铺多张图片Android中实现平铺图片有两种方式:在drawable中定义平铺的Bitmap然后在ImageView中引

    Android通过ImageView实现图片的显示和切换

    5. **图片裁剪**:如果图片需要特定的形状或比例,可以使用ImageView的scaleType属性或BitmapShader进行裁剪和绘制。 6. **性能优化**:对于大量图片的显示,可以考虑使用RecyclerView或PagerAdapter来实现图片列表...

    android自定义ImageView实现旋转动画

    在Android开发中,自定义控件是提升应用用户体验和实现独特功能的重要手段。本文将深入探讨如何通过自定义ImageView来实现旋转动画,让图片在XYZ轴上动态展示,为用户带来更加生动的视觉效果。 首先,我们需要创建...

    Android-DismissibleImageView点击ImageView能够扩展至全屏拉到屏幕边缘恢复原状

    在Android应用开发中,图片加载和展示是常见且重要的任务,尤其在用户界面设计中,图片的呈现方式能显著影响用户体验。"Android-DismissibleImageView点击ImageView能够扩展至全屏拉到屏幕边缘恢复原状"这个特性是...

    Android中使用自定义ImageView实现图片圆形遮罩效果

    本篇文章将详细讲解如何在Android中通过自定义一个ImageView来实现图片的圆形遮罩效果。这个功能对于创建用户界面,如头像显示或者一些需要突出圆形元素的设计时非常有用。 首先,我们需要创建一个新的Java类,继承...

    Android ImageView实现图片裁剪和显示功能

    本文将详细介绍如何使用ImageView实现图片裁剪和显示功能,这对于许多应用如社交、编辑类应用是非常关键的。 首先,要在XML布局文件中设置ImageView和两个Button。按钮分别用于选择图片和启动裁剪操作。以下是一个...

    android 将Imageview生成图片后保存到本地相册的实现

    android 将Imageview 将view生成图片后保存到本地相册的实现生成图片后保存到本地相册的实现,android 将Imageview生成图片后保存到本地相册的实现 android 将Imageview生成图片后保存到本地相册的实现, 有需要的朋友...

    实验三 ImageView和Switch的使用

    实验三“ImageView和Switch的使用”旨在帮助开发者深入理解和掌握这两个控件的功能与用法。 ImageView主要用于显示图像,它可以是静态图片或者动态的GIF。在Android中,我们通常使用XML布局文件来添加ImageView,并...

    android安卓通过url获取网络图片并显示在imageview中

    首先,我们需要引入能够处理网络请求和图片加载的库。Android本身并不直接支持从网络加载图片到ImageView,所以我们通常会借助第三方库,如Glide、Picasso或Volley。这里我们以Glide为例,因为它是目前最流行的...

    Android用线程实现ImageView图片变换+可以停止和继续

    这个主题“Android用线程实现ImageView图片变换+可以停止和继续”主要关注如何利用线程技术来实现图片的动态变换,并且提供了暂停和继续的功能。这涉及到以下几个关键知识点: 1. **线程**:Android主线程(UI线程...

    Android自定义ImageView实现缩放,回弹效果

    在`onScale()`方法中,我们可以获取到缩放的比例因子,并据此更新ImageView的ScaleX和ScaleY属性,以实现图片的等比例缩放。 ### 2. 实现回弹效果 回弹效果通常涉及到物理模拟,我们可以使用SpringForce类...

    Android中使用自定义ImageView实现图片圆形遮罩效果(常和Glide搭配使用)

    Android中使用自定义ImageView实现图片圆形遮罩效果(常和Glide搭配使用),详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/63834235

    自定义ImageView实现图片的缩放功能

    在Android开发中,自定义控件是提升应用用户体验和实现特定功能的重要手段。本文将深入探讨如何通过自定义ImageView来实现图片的缩放功能。在Android的UI设计中,ImageView通常用于显示图像,但默认情况下,它并不...

    裁剪图片,通过imageView显示

    通过以上步骤,你可以在Android应用中实现裁剪图片并通过`imageView`显示的功能。确保在实际开发中根据具体需求进行调整,比如添加错误处理、优化用户体验等。同时,随着Android版本的更新,需要注意适配新特性,如...

    android 在imageview上的指定位置添加图片 图片尺寸自适应

    综上所述,要在Android的ImageView上指定位置添加图片,并实现等比例缩放和自适应,我们需要对Android的视图布局、ImageView的ScaleType、Bitmap的缩放以及适应不同屏幕尺寸有深入理解。通过以上代码示例,我们可以...

    Android开发之ImageView通过matrix实现两点缩放和图片拖动

    在Android开发中,ImageView是用于显示图像的常见组件。然而,仅靠基本的ImageView功能,我们往往无法满足一些复杂的交互需求,比如用户可以对图片进行拖动和双指缩放。这种功能通常需要借助Matrix类来实现。Matrix...

Global site tag (gtag.js) - Google Analytics