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
原创粉丝点击