跟着老罗的视频做了这样一个安卓程序,却发现截取图片功能根本没有实现到,这是何故?其中也写了一些疑问在代码的注释中。。
MainActivity文件:
ample.imageviewdemo02;import android.support.v7.app.ActionBarActivity;
import android.annotation.SuppressLint;
t.Intent;
aphics.Bitmap;
aphics.BitmapFactory;
aphics.Point;
import android.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) {Create(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) {ActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) {switch (requestCode) {case CHOSE_BUTTON: {Uri uri = Data(); //获得图片路径//获得手机屏幕的宽度和高度,存放于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) il(height/(float)point.y);int wRadio = (il(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 = ParcelableExtra("data");imageView.setImageBitmap(bitmap);}}}}
}
<LinearLayout xmlns: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="裁剪图片"/><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>
本文发布于:2024-01-29 03:50:12,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170647141712489.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |