android困惑之UI---imageView实现对图片的选取,和裁剪功能。。。。
来源:互联网 发布:淘宝申请实拍保护 编辑:程序博客网 时间:2024/05/20 09:22
跟着老罗的视频做了这样一个安卓程序,却发现截取图片功能根本没有实现到,这是何故?其中也写了一些疑问在代码的注释中。。
MainActivity文件:
package com.example.imageviewdemo02;import android.support.v7.app.ActionBarActivity;import android.annotation.SuppressLint;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Point;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;@SuppressLint("NewApi")public class MainActivity extends ActionBarActivity implements OnClickListener {private Button choseButton;private Button cutButton;private ImageView imageView;// 意图返回标志private static final int CUT_BUTTON = 1;private static final int CHOSE_BUTTON = 2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);choseButton = (Button) findViewById(R.id.chose);cutButton = (Button) findViewById(R.id.cut);imageView = (ImageView) findViewById(R.id.imageView);choseButton.setOnClickListener(this);cutButton.setOnClickListener(this);}@Overridepublic void onClick(View v) {// 判断是哪个Buttonswitch (v.getId()) {case R.id.chose: {// action_pick是一个选择的动作意图,返回我们所选择的。第二个参数是图片库url,是打开的它// 该intent返回的是所选择内容的路径,使用getData()方法获得该路径Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivityForResult(intent, CHOSE_BUTTON);break;}case R.id.cut: {// 由于这个intent构建较长,所以弄个方法存放。Intent intent = getImageClipIntent();startActivityForResult(intent, CUT_BUTTON);break;}}}private Intent getImageClipIntent() {Intent intent = new Intent(Intent.ACTION_GET_CONTENT);//要裁剪就要设置图片的属性,大小//设置获取的内容的类型为图片intent.setType("image/*");//放入extra数据设置可滑动截取图片intent.putExtra("crop", "true");//设置剪切的x,y轴的比例intent.putExtra("aspectX", 1);//x方向intent.putExtra("aspectY", 1);//y方向//设置输出图片大小intent.putExtra("outputX", 90);intent.putExtra("outputY", 90);//设置有返回值intent.putExtra("return-data", true);return intent;}// 接受执行intent后返回的值并处理@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) {switch (requestCode) {case CHOSE_BUTTON: {Uri uri = data.getData();//获得图片路径//获得手机屏幕的宽度和高度,存放于point中(其实屏幕的应用程序部分要比这个小因为有其他的部分占用了手机屏幕)Point point = new Point();getWindowManager().getDefaultDisplay().getSize(point);//对图片进行适应屏幕的操作try {//实例化图片裁剪类...这不是选择并返回图片吗?实例化它干嘛?BitmapFactory.Options factory = new BitmapFactory.Options();//还是搞不清楚这个是拿来干嘛的。。。factory.inJustDecodeBounds = true;Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, factory);//试验bitmap是否为空结果不为空//imageView.setImageBitmap(bitmap);//问:为何getHeght()会出现空指针异常?//获取图片的尺寸并和屏幕的大小作比较int height = factory.outHeight;int width = factory.outWidth;//做比较,若大于一这图片高或宽大于屏幕尺寸int hRadio = (int) Math.ceil(height/(float)point.y);int wRadio = (int)Math.ceil(width/(float)point.x);if(hRadio>1||wRadio>1){if(hRadio>wRadio){//把图片的大小缩放为1/hRadiofactory.inSampleSize = hRadio;}else{factory.inSampleSize = wRadio;}}factory.inJustDecodeBounds = false;//为什么要二次调用这个?何用? 上面的那个bitmap是拿来干嘛的?Bitmap bitmap2 = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, factory);imageView.setImageBitmap(bitmap2);} catch (Exception e) {e.printStackTrace();}break;}case CUT_BUTTON: {//搞不懂咯 。。。为什么选去图片反而比裁剪图片的代码要长那么多。。。。Bitmap bitmap = data.getParcelableExtra("data");imageView.setImageBitmap(bitmap);}}}}}
xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/chose" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="选择图片" /> <Button android:id="@+id/cut" 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
- android困惑之UI---imageView实现对图片的选取,和裁剪功能。。。。
- Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能
- 【Android 开发】:UI控件之 ImageView 实现适屏和裁剪图片的功能
- imageView实现图片适屏和裁剪图片的功能
- ImageView实现图片裁剪和显示功能
- ImageView实现适屏和裁剪图片的功能
- 【Android 开发】:UI控件之 ImageView 实现图片旋转和缩放功能
- android UI——具有裁剪功能的imageview
- ImageView的使用,实现本地图片的适屏显示和裁剪功能。
- Android选取相机、相册图片进行裁剪,并更新UI
- 选取图片裁剪并上传功能的实现(后台java实现)
- java可以实现对图片的裁剪功能么
- 一款图片选择器,模仿微信的 ui,实现了 图片选取,图片预览 ,拍照 功能
- Android之UI学习篇六:ImageView实现图片旋转和缩放
- Android开发:相册读取、拍照、图片裁剪和图片上传服务器等功能的实现
- Android图片的裁剪功能
- Android实现图片的裁剪(不调用系统功能)
- Android UI之ImageView图片视图
- Xcode6.1调试的时候有时参数总为nil
- (原)MongoDB在系统中的使用
- R语言机器学习笔记——垃圾邮件分类
- 四色猜想与连连看
- Android平台下利用zxing实现二维码开发
- android困惑之UI---imageView实现对图片的选取,和裁剪功能。。。。
- 区域赛选拔题--B题--Adding Sevens
- 弹出居中的div层
- 蛮力法:设计算法求解字符串的模式匹配问题,并编程实现。
- 【木头Cocos2d-x 037】retain和release倒底怎么玩?
- linux鸟哥私房菜学习笔记之四-script
- jquery datepicker
- 各种指令
- 函数版星号图2(修改)