bigname22 2016-05-20 03:38 采纳率: 15.4%
浏览 1259

imageview无法显示相机拍出来的照片

理想中程序:该应用有两个按钮,一个imageview。
一个按钮是调用手机相机拍照之后,剪裁该图片,然后显示在imageview中,但执行完剪裁之后并没有显示在imageview中。
另外一个按钮是打开相册,选取照片后剪裁图片之后再显示在imageview中。
但实际中出现问题:
1.第一个按钮在剪裁之后没有在imageview中显示。(但确定是已经执行了onActivityResult()方法中的显示imageview的方法了,,因为下面代码中加了一句通知能正常弹出来)
2.第二个按钮在打开相册之后没有进入剪裁图片的界面就直接跳回到主界面那里(但还是没有成功显示imageview)ps:因为书上例子是会进入剪裁界面的,但从代码里面看,我并不理解哪一句代码才是进入到剪裁界面。(第一个按钮会出现剪裁我知道)
下面就直接上代码了。就一个类!麻烦大家帮忙看看,感激不尽!!

 package com.example.choosepictext;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {
    Button takephotobutton , choosephotobutton ;
    ImageView imageview ;
    private Uri imageuri ;
    public static final int TAKE_PHOTO = 1 ;
    public static final int CROP_PHOTO = 2 ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        takephotobutton = (Button)findViewById(R.id.takebutton);
        choosephotobutton = (Button)findViewById(R.id.choosebutton);
        imageview = (ImageView)findViewById(R.id.imageview);
        takephotobutton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // TODO Auto-generated method stub
                File outputimage = new File(Environment.getExternalStorageDirectory(), "tempImage.jpg");
                try{
                    if(outputimage.exists()){
                        outputimage.delete();
                    }
                    outputimage.createNewFile();
                }catch(Exception e){}
                imageuri = Uri.fromFile(outputimage);//吧outputimage转成uri对象
                Log.v("Mylog","buttononclick:"+imageuri.getPath());
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");//调用相机
                intent.putExtra(MediaStore.EXTRA_OUTPUT,imageuri);
                startActivityForResult(intent, TAKE_PHOTO);
            }
        }
        );
        choosephotobutton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // TODO Auto-generated method stub
                File outputimage = new File(Environment.getExternalStorageDirectory(),"output_image.jpg");
                try{
                    if(outputimage.exists()){
                        outputimage.delete();
                    }
                    outputimage.createNewFile();
                }catch(IOException e )  {}
                imageuri = Uri.fromFile(outputimage);
                Intent intent = new Intent("android.intent.action.GET_CONTENT");
                intent.setType("image/*");
                intent.putExtra("crop", true);
                intent.putExtra("scale", true);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageuri);
                startActivityForResult(intent, CROP_PHOTO);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode , int resultCode, Intent data){
        switch(requestCode){
        case TAKE_PHOTO:
            if(resultCode == RESULT_OK){
            Intent intent = new Intent("com.android.camera.action.CROP");//调用剪裁
            intent.setDataAndType(imageuri,"image/*");
            intent.putExtra("scale", true);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, imageuri);
            Log.v("Mylog","result:"+imageuri.getPath());
            startActivityForResult(intent, CROP_PHOTO);
            }
            break ;
        case CROP_PHOTO:

            try{
                Log.v("Mylog","crop:"+imageuri.getPath());
                Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageuri));
                BitmapFactory.decodeFile(imageuri.getPath());
                imageview.setImageBitmap(bitmap);
                imageview.setVisibility(View.VISIBLE);
                Toast.makeText(MainActivity.this, "setImage", Toast.LENGTH_SHORT).show();

            }catch(FileNotFoundException e){}

                break ;
            default:
                break ;
        }
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

  • 写回答

5条回答 默认 最新

  • zhang106209 2016-05-20 06:07
    关注

    可能是你裁剪的图片大于你设置图片
    public void startPhotoZoom(Uri uri) {
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    intent.putExtra("crop", "true");
    // aspectX aspectY 是宽高的比例
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    // outputX outputY 是裁剪图片宽高
    intent.putExtra("outputX", 300);
    intent.putExtra("outputY", 500);
    intent.putExtra("return-data", true);
    startActivityForResult(intent, 3);
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制